1、语法
1.1 shell变量
shell变量只有一种数据类型:字符串类型,变量名命名方式与C语言相同。
VAR=10 //变量定义,等号两侧不能有空格
VAR=100 //变量重新赋值。第一次=为变量定义,其后的=为变量赋值
VAR+=10 //追加
VAR=$VAR.asd //字符串拼接
变量的使用:$VAR或${VAR}
清空变量:unset VAR
1.1.1输入输出
输出:echo “字符串”
输入:read ${VER}
VAR=10
echo "VAR=$VAR"
VAR=100
echo "VAR=$VAR"
VAR+=10
echo "VAR=$VAR"
VAR=$VAR.asd
echo "VAR=$VAR"
echo "输入:"
read $VAR
echo "$VAR"
1.1.2注释
(1)单行注释
注释整行:在行首加#
行尾加注释:先输入空格后加#
(2)多行注释
:<<!
注释
!
#注释
echo "注释" #注释
:<<!
注释
内容
!
1.2单引号与双引号
单引号:存放字符串,不可展开变量
双引号:存放字符串,可以展开变量
VAR=10
echo '$VAR'
echo "$VAR"
1.3通配符、命令替换、算数运算、转义字符
(1)通配符
* :匹配任意字符
?: 匹配一个字符
[ ]: 匹配括号中出现的任意一个字符 [a-z][0-9][123]
(2)命令替换
$( )或$` `取命令执行的结果作为变量值
VAR=$(ls)
VAR=$`ls`
VAR=$(ls)
echo $VAR
VAR=$`ls`
echo $VAR
(3)算数运算
$((算式))或$[算式]。只能进行整数运算
VAR=10
echo "$(($VAR+10))"
echo "$[$VAR/10]"
(4)转义字符
'\'在Shell中被用作转义字符,用于去除紧跟其后的单个字符的特殊意义
VAR=10
echo $VAR
echo \$VAR
1.4条件判断表达式
test或[ ]。
注意:1)表达式为真结果为0,为假结果为1。
2)表达式的值不允许赋值给其他变量,该判断表达式每一部分都已空格隔开
大小判断:(大小判断只能用于整数之间)
-eq:等于(equal)
-ne:不等于(not equal)
-lt:小于 (less than)
-le:小于等于(less equal)
-gt:大于(greater than)
-ge:大于等于(greater equal)
文件类型判断:
[ -d DIR ]:如果DIR存在并且是一个目录则为真
[ -f FILE ]:如果FILE存在并且是一个普通文件则为真
[ -e FILE ]:判断文件是否存在,如果存在则为真
字符串长度判断:
[ -z ${STR} ]:如果STR的长度为0则为真(z就是zero)
[ -n ${STR} ]:如果STR的长度非0则为真(n就是not zero)
字符串判断是否相等:
[ str1 = str2 ]:如果俩个字符串相同则为真(比较运算符两边要加空格)
[ str1 != str2 ]:如果字符串不相同则为真(比较运算符两边要加空格)
test 10 -gt 5
echo $?
[ 10 -gt 5 ] #每部分用空格隔开
echo $?
1.5特殊变量
$0 相当于C语言main函数的argc[0]
$1、$2……这些称为位置参数;相当于C语言main函数的argc[1]、argc[2]...
$# 相当于C语言main函数的argv - 1,注意这里的#后面不表示注释
$@ 表示参数列表"$1"、"$2"……
$* 表示参数列表"$1"、"$2"……
$? 上一条命令的Exit Status
$$ 当前进程号
echo "$0 $1 $2 $#"
echo $@
echo "$# $#"
[ 10 -nt 10 ]
echo $?
echo $$
1.6逻辑运算
-a 逻辑与 [ EXPR1 -a EXPR2 ]
-o 逻辑或 [ EXPR1 -o EXPR2 ]
! 逻辑非 [ ! EXPR1 ]
2、语句
2.1 if语句
if [ 判断条件 ];then 执行语句 fi
|
if [ 判断条件 ] then 执行语句 fi
|
if [ 判断条件 ];then 执行语句 elif [ 判断条件 ];then 执行内容 else 执行内容 fi
|
2.2 case语句
case $变量 in case1) 命令1;; case2) 命令2;; *) 命令3;; esac |
read num
case $num in
1)
echo "num=1";;
2)
echo "num=2";;
*)
echo "其他情况";;
esac
2.3 for语句
for((i=0;i<5;i++)) do 执行内容 done
|
for i in 变化范围 do 执行内容 done
|
2.4 while循环
while [ 循环条件 ] do 执行内容 done |
I=0
while [ $I -lt 10 ];do
echo $I
I=$[I+1]
done
2.5 结束语句
break :可以跳出循环;
continue:跳过本次循环,但不会跳出循环。
return:结束本函数并返回一个0-255之间的整数值。
exit:结束本程序
3、数组
1)数组定义
定义1: a=(1 2 3 4 5) //下标从 0 开始各个数据之间用空格隔开
定义2: a[0]=1;a[1]=2;a[2]=3 //数组长度是可变的
shell中的数组长度是可变的
2)数组引用:${a[下标]} //单个元素引用
${a[@]} //整体引用
${#a[@]} 或 ${#a[*]} //数组长度
4、函数
函数定义中,没有返回值也没有参数列表。函数调用只需要函数名
函数名( ) { 函数体 } |
foo()
{
echo "Function foo is called"
}
echo "========"
foo
echo "========"