一、为什么要学习Shell编程

  1. Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
  2. 对于JavaEEhe Python程序员来说,是工作的需要,如要求编写一些Shell脚本进行程序或服务器的维护。
  3. 对于大数据程序员来说,需要编写Shell程序来管理集群。

二、Shell是什么

  • Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

三、Shell脚本的快速入门

3.1 脚本格式要求

  1. 脚本以#!/bin/bash开头
  2. 脚本需要有可执行权限

3.2 编写第一个Shell脚本

  • 创建一个Shell脚本,输出一个Hello world
  • 步骤如下:
  1. 先创建一个myshell.sh文件,并输入命令

  1. 赋予可执行权限

  1. 执行,相对路径和绝对路径都可以

四、Shell变量

4.1 Shell变量的介绍

  1. Linux Shell变量分为:系统变量用户自定义变量
  2. 系统变量:

    1. $HOME
    2. $PWD
    3. $SHELL
    4. $USER

  1. 显示当前shell中所有的变量:set

4.2 Shell变量的定义

4.2.1 基本语法

  1. 定义变量:变量=值
  2. 撤销变量:unset 变量
  3. 声明静态变量:readonly 变量=值(静态变量是不能unset的)

4.2.2 定义变量的规则

  1. 变量名称可以由字母、数字、下划线组成,但是不能以数字开头
  2. 等号两侧<font color="red">不能有空格</font>
  3. 变量名称一般习惯为大写

4.2.3 将命令的返回值赋给变量

  1. A=ls -l 目录名。反引号(这里编程代码块了)
  2. A=$(ls -l 目录名)$等价于反引号

4.3 设置环境变量

4.3.1 基本语法

  1. export 变量名=变量值:将shell变量输出为环境变量
  2. source 配置文件:让修改后的配置信息立即生效
  3. echo $变量名:查询环境变量的值

4.3.2 快速入门

  1. /etc/profile文件中定义TOMCAT_HOME环境变量
  2. 查看环境变量TOMCAT_HOME的值

    1. 让其生效才能查看:source /etc/profile
  3. 在另外一个shell程序中使用TOMCAT_HOME

  • linux中的多行注释:<<要注释的内容!

4.4 位置参数变量

4.4.1 介绍

  • 当执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量

    • 如:./myshell.sh 100 200,可以在myshell脚本中获取到这个命令行所包含的信息

4.4.2 基本语法

  1. $n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,需要用大括号包含,${10}
  2. $*:这个变量代表命令行中所有的参数,<font color="red">把所有的参数看做一个整体</font>
  3. $@:这个变量也代表命令行中的所有参数,<font color="red">把每个参数区分对待</font>
  4. $#:这个变量代表命令行中所有参数的个数

4.4.3 应用实例

  • 编写一个shell脚本positinoPara.sh,在脚本中获取到命令行的各个参数信息

4.5 预定义变量

4.5.1 基本介绍

  • shell事先已经定义好的变量,可以直接在shelle脚本中使用

4.5.2 基本语法

  1. $$:当前进程的进程号(PID)
  2. $!:后台运行的最后一个进程的进程号(PID)
  3. $?:最后一次执行的命令的返回状态。

    1. 如果这个变量的值为0,证明上一个命令正确执行;
    2. 如果这个变量的值为非0,则证明上一个命令执行不正确。

4.6 运算符

4.6.1 基本介绍

  • 在shell中进行运算操作

4.6.2 基本语法

  1. $((运算式))$[]
  2. expr m + n

    1. 注意expr运算符间要有空格
    2. \* / %:乘、除、取余

4.7 条件判断

4.7.1 判断语句 基本语法

  • [ condition ]:condition前后都要有空格

    • 非空返回true,可使用$?验证(0为true,>1为false
  • 应用实例
[ nihao ]true
[ ]false

4.7.2 常用判断条件

两个整数的比较

  1. =:字符串比较
  2. -lt:小于
  3. -le:小于等于
  4. -eq:等于
  5. -gt:大于
  6. -ge:大于等于
  7. -ne:不等于

按照文件权限进行判断

  1. -r:有读的权限
  2. -w:有写的权限
  3. -x:有执行的权限

按照文件类型判断

  1. -f:文件存在并且是一个常规的文件
  2. -e:文件存在
  3. -d:文件存在并且是一个目录

4.7.3 应用实例

  • "ok"是否等于“ok”

  • 23是否大于等于22

  • /root/install.log目录中的文件是否存在

4.8 流程控制

4.8.1 if 判断

  • 基本语法
if[ 条件判断式 ]
 then
     程序
 elif[ 条件判断式 ]
 then
     程序
fi
  • 注意:[ 条件判断式 ]中条件判断式两边都有空格

4.8.2 case 语句

  • 基本语法
case $变量名 in 
"值1")    
    如果变量的值等于值1,则执行程序1
    ;;
"值2")
    如果变量的值等于值2,则执行程序2
    ;;
"值3")
    如果变量的值等于值3,则执行程序3
    ;;
*)
    如果变量的值都不是以上的值,则执行此程序
    ;;
esac

4.8.3 for循环

  • 基本语法1
for 变量 in 值1 值2 值3
do
    程序
done

  • 基本语法2
for ((初始值;循环控制条件;变量变化))
do
    程序
done

4.8.4 while循环

  • 基本语法
while [ 条件判断式 ]
do
    程序
done

4.9 read读取控制台输入

4.9.1 基本语法

  • read [选项] [参数]
  • 选项:

    • -p:指定读取值时的提示符
    • -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待
  • 参数:

    • 变量名:指定读取值的变量名

4.10 函数

4.10.1 函数介绍

  • shell编程和其他编程语言一样,有系统函数,也可以自定义函数。

4.10.2 系统函数

basename

  • 基本语法1:basename [pathname] [suffix]

    • 功能:返回完整路径最后/的部分,常用于获取文件名;若指定后缀,就会把后缀删除

dirname

  • 基本语法:dirname [pathname]

    • 功能:返回完整路径最后/的前面部分,常用于返回路径部分

4.10.3 自定义函数

  • 基本语法
[function] funname[()]
{
    Action;
    [return int;]
}
  • 调用直接写函数名:funname[值]

Last modification:November 5th, 2019 at 08:48 pm