目录
1、shell脚本基本要求
- 脚本要以#!/bin/bash开头
- 需要给shell脚本可执行的权限
- 运行脚本的两种方式:
- 使用 ./脚本相对路径(需要在脚本所在目录下)或者直接使用脚本的绝对路径。(使用这种方式需要脚本有可执行权限)
- 使用sh 脚本绝对路径或相对路径。(这种方式不需要有可执行权限)
- 注释的使用方式:
- 单句的注释使用#
- 段落的注释在开始注释的语句前一行使用:>>!,在结束注释的语句的下一行使用!,!可以换成其他的,但是要确保前后对应。
2、shell的变量
查看所有变量可以使用set
-
系统变量:
$HOME,$PWD,$SHELL,$USER等。
-
用户自定义变量:
(如果需要输出变量需要在变量前加上$,如果不加会认为是符号)
- 定义变量:变量=值(=号左右两边不能有空格)
- 撤销变量:unset 变量
- 声明静态变量:readonly 变量=值,不能被撤销
- 变量命名规则:变量名称可以使用字母、数字和下划线组成,但不能使用数字开头;变量名称一般使用大写。
- 将命令的返回值赋给变量:使用A=`data`(是反引号,不是单引号)或者使用A=$(data)
-
环境变量:
相当于是全局变量,使用export 变量=值,可以将该变量设置为环境变量。需要使用source 修改的文件才能将配置的信息立即生效。
-
位置参数变量:
类似于c语言中的形参,能获得命令行给出的参数。
基本语法:
- $n:n为数字,$0代表命令本身,其他的都表示参数,10以上要使用大括号,例如${10}
- $*:表示命令行中所有的参数,把所有参数看成一个整体
- $@:也可以表示命令行中所有的参数,把每个参数区分对待
- $#:表示命令行中所有参数的个数
-
预定义变量:
shell中已经设定好的变量,可以直接在shell脚本中使用。
基本语法:
- $$:当前进程的PID号
- $!:后台运行的最后一个进程的PID号
- $?:最后一次执行的命令的返回状态,是0则表示上一个命令正确执行,否则为非0
3、运算符
三种使用运算符计算表达式的方式:
- $((运算式))
- $[运算式]
- expr m + n:运算符左右要有空格,如果想将结果赋给某个变量,需要用反引号。使用乘法时需要使用反斜杠\*,在使用到其他符号,如(),也需要使用反斜杠,且符号左右都需要有空格。
4、shell语法
1、条件判断if
- 判断条件非空时返回ture,[ hspEdu ]:返回ture;[ ]:返回false。
- 基本语法:
if [ 判断条件 ]
then
执行代码
elif [ 判断条件 ]
执行代码
.
.
.
fi
- 常用判断条件:
- = :用于字符串之间的比较
- 两个整数之间的比较:
- -It:小于
- -Ie:小于等于
- -eq:等于
- -gt:大于
- -ge:大于等于
- -ne:不等于
- 判断文件权限:
- -r:读权限
- -w:写权限
- -x:可执行权限
- 判断文件类型
- -f:文件存在并且是一个常规文件
- -e:文件存在
- -d:文件存在并且时一个目录
2、条件判断case
基本语法:
case $变量名 in
"值1")#变量值=值1
执行代码
;;
"值2")#变量值=值2
执行代码
;;
.
.
.
*)#都不是以上的值
执行代码
;;
esac
3、for循环
- 基本语法1:
for 变量 in 值1 值2 ... #将后面的值分别赋给变量,直到全部赋给变量循环停止,可使用位置参数变量
do
执行代码
done
- 基本语法2:
for ((初始值;循环控制条件;变量变化))
do
执行代码
done
4、while循环
基本语法:
while [ 循环条件 ]
do
执行代码
done
5、read输入
- 基本语法:read [选项] [参数]
- 选项:(可以连续使用)
- -p 提示符:指定读取时的提示符
- -t 时间:指定读取值时等待的时间
4、shell的函数
-
系统函数:
1、basename函数:返回完整路径最后 /的部分。
基本语法:basename [pathname/string] [suffix]:删掉前缀包括最后一个/,然后将字符串显示出来,suffix为后缀,如果有指定,那后缀也会被去掉。
2、dirname函数:返回完整路径最后/前面的部分。
基本语法:dirname 文件绝对路径:删掉最后一个/后面的内(文件名),然后返回剩下的路径(目录的部分)。
-
自定义函数:
基本语法:(不需要有形参列表 )
[ function ] funname[()]
{
执行的代码
[return int;]
}
funname [值]
传参方式:
- 直接传入参数:使用$号加数字,如$1,$2......,$0表示命令本身。
#定义求和函数 function GetSum() { SUM=$[$1+$2] echo SUM=$SUM } #输入 read -p "请输入n1=" n1 read -p "请输入n2=" n2 #调用 GetSum $n1 $n2
- 使用函数外定义的变量:在函数内只需按正常使用变量即可。
#定义求和函数 function GetSum() { SUM=$[$n1+$n2] echo SUM=$SUM } #输入 read -p "请输入n1=" n1 read -p "请输入n2=" n2 #调用 GetSum $n1 $n2