一、shell变量
1、变量名与赋值符号间不能有空格。
2、首个字符必须为字母a~z或A~Z。
3、使用一个已定义的变量,在变量名前加‘$‘,如:
myName=“firefly”
echo $myname
echo ${myName}
加花括号帮助识别变量的边界,建议加上s。
4、删除变量:unset varName,不能删除只读变量。
5、三种变量:局部变量、环境变量、shell变量
二、shell替换
1、变量替换
echo -e "hello, Emma!\n"
若无-e,则不转义而直接输出
2、3、略
三、条件语句
if-else语句
(1)if...then...fi
if [ expression ]
then
Statement(s) to be executed if expression is true
fi
(2)if...else...fi
if [ expression ]
then
Statement(s) to be executed if expression is true
else
Statement(s) to be executed if expression is not true
fi
(3)if...elif...fi
if [ expression 1 ]
then
Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
Statement(s) to be executed if expression 3 is true
else
Statement(s) to be executed if no expression is true
fi
注:
(1)expression与方括号[]间有空格
(2)条件语句中可以使用符号>,>=,==,<,<=,!=或者-gt, -gq, -eq, -lt, -lq, -nq判断大小关系
case..seac语句
1、同其他语言switch-case语句,为多分支选择结构;
2、case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:
case 值 in #in为关键字
模式1)
command1
...
commandn
;;
模式n)
command1
...
commandn
;;
*)
command1
...
commandn
;;
esac
(1)每一模式都必须以右括号结束,取值可以为变量或常数;
(2)匹配发现取值符合某模式后执行该模式的命令直至‘;;‘结束,‘;;‘类比break语句;
(3)若无匹配模式,用‘*‘捕获该值,再执行后面的语句。
四、shell注释:只能单行注释,前面加‘#‘
如果大段代码需要注释或者取消注释,可以把要注释部分用花括号括起来,定义成函数,未被调用则不执行达到注释的效果。
五、字符串:单引号、双引号、无引号
单引号字符串的限制:
- - 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- - 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号的优点:
- - 双引号里可以有变量
- - 双引号里可以出现转义字符
六、shell数组
1、定义数组,shell中括号表示数组,数组元素用空格符号分开
arrName=(1 2 3)或者
arrName=(1
2
3)或者
arrName[0]=0
arrName[1]=1
arrName[2]=2
2、读取数组,格式${arrName[index]}
value=${arrName[2]}
注:使用符号‘@‘或‘*‘读取数组中所有元素
eg: ${arrName[*]} 、 ${arrName[@]}
3、获取数组的长度
获取数组的长度方法同字符串
获取数组元素个数:length=${#varName[*]}
获取数组单个元素的长度:lengthn=${#varName[2]}
七、shell echo命令
你类比C语言中的printf,C++中的cout
shell中也有printf,稍有不同
这里仅说明与C语言printf()函数的不同:
- printf 命令不用加括号
- format-string 可以没有引号,但最好加上,单引号双引号均可。
- 参数多于格式控制符(%)时,format-string 可以重用,可以将所有参数都转换。
- arguments 使用空格分隔,不用逗号。
eg:
- $ printf"%d %s\n"1"abc"
- 1 abc
八、shell循环语句
1、for循环
格式:
for 变量 in 列表
do
command1
...
commandn
done
(1)列表是一组值(数值、字符串)组成的序列,每个值通过空格分隔。
(2)每循环一次,将列表中的下一个值赋值给变量。
(3)in列表是可选的,若不用则使用其位置参数。
for var in 1 3 5 7
#!/bin/sh
for var in 1 3 5 9
do
echo ${var}
done
2、while循环
格式:
while command
do
Statement(s) to be executed if command is true
done
3、unitl循环
格式
until command
do
Statement(s) to be executed until command is true
done
退出循环:break、continue
注:
(1)嵌套循环中,break n表示退出第n层循环,从内层开始计数。
(2)continue退出当前循环。
九、shell函数
- 删除函数:$unset .f function_name
- 当n>10时需要${n}获取参数;n<10时可以直接$n;
十、输入输出重定向
(1)>(或<)输出(或输入)重定向会覆盖原内容;
(2)>>(或<<)输出(或输入)重定向不会覆盖原内容。
十一、shell文件包含
shell可以包含外部脚本,将外部脚本的内容合并到当前脚本。
格式:
(1). filename(注意空格)
(2)source filename
注:被包含脚本不需要执行权限。
推荐学习资料: