您的位置:首页 > 运维架构 > Shell

Linux命令行与shell编程笔记 结构化命令

2016-08-20 12:18 309 查看

11章 使用结构化命令

if  command
then
command
fi


这个结构就是if 部分命令成功运行 ,就执行then,否则跳过then。就是C语言中的if没有else的部分。但是不要理解为ifcommand为真执行then部分的命令。

if  command
then
command
else
command
fi


如果if后面的命令退出状态码=0,那么就执行then,否则,执行else

if command1
then
commands
elif command2
then
commands
fi


test命令

test命令中列出的条件成立,test命令就会退出并且返回退出状态码0,如果条件不成立,返回退出状态码1.在这种情况下,if形式完全等同于其他语言的if语句

if test condition
then
commands
fi
#或者
if [ command ]
then
commands
fi
#方括号两边必须加入一个空格,不然会报错


test命令可以比较3类条件,数字比较,字符串比较,文件比较

1 数值比较

比较 描述

n1 -eq n2 检查n1是否与n2相等

n1 -ge n2 检查n1是否大于或等于n2

n1 -gt n2 检查n1是否大于n2

n1 -le n2 检查n1是否小于或等于n2

n1 -lt n2 检查n1是否小于n2

n1 -ne n2 检查n1是否不等于n2

注意:不能使用浮点数

2 字符串比较

比较 描述

str1 = str2 检查str1是否和str2相同

str1 != str2 检查str1是否和str2不同

str1 < str2 检查str1是否比str2小

str1 > str2 检查str1是否比str2大

-n str1 检查str1的长度是否非0

-z str1 检查str1的长度是否为0

1.大于小于符号要转义,不然会被识别为重定向符号

2.test命令根据ASCII顺序排序,与sort命令不同

字符串长度

当变量为空字符串或者没有初始化时,变成长度是0

空字符串或没有初始化的变量可能会对程序有灾难性影响,使用前最好先使用test命令中的-n和-z确认

3文件比较

比较 描述

-d file 检查file是否存在并且是否是一个目录

-e file 检查file是否存在

-f file 检查file是否存在并且是否是一个文件

-r file 检查file是否存在并可读

-s 检查file是否存在并非空

-w 检查file是否存在并可写

-x 检查file是否存在并可执行

-O 检查file是否存在并属于当前用户所有

-G 检查file是否存在并且默认组与当前用户相同

file1 -nt file2 检查file1是否比file2新(new than)

file1 -ot file2 检查file1是否比file2旧(old than)

这是比较文件的创建时间

多个条件一起判断:|| &&

使用双尖括号

将高级数学表达式放入其中。

命令符号

符号 描述

val++ 后增

val– 后减

++val 先增

–val 先减

! 逻辑求反

~ 位求反

** 幂运算

<< 左位移

的>> 右位移

& 位布尔和

| 位布尔或

&& 逻辑和

|| 逻辑或

使用双方括号

提供了模式匹配(pattern matching)特性,可以在其中使用正则表达式

if [[ $USER == r* ]]

case命令

命令格式:

case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac


bash中是可以在case中检查字符串的

case $USER in
rich | barbara)
echo "welcome $USER";;
testing)
echo"echo "special testing account";;
jessica)
echo "do not forget to log off when you are done";;
*)
echo "sorry you are not allowed here";;
esac


12章 更多的结构化命令

for var in list
do
command
done


list中根据空格确定var,也可以更改字段分隔符(空格,制表符,换行符)

在shell脚本中更改IFS环境变量

IFS=$’\n’

for var in
cat $file


for var in /home/rich/test/*

C语言风格的for命令

for((variable assignment;condtion;interator process))
do
commands
done


for((i=1;i<=10;++i))

while命令

while test command
do
other commands
done


当使用多个测试命令,只有最后一个测试命令的退出状态码会被用来决定什么时候结束循环

until命令

其工作方式与while相反,要求指定一个输出非零退出状态码的测试命令

until test commands
do
other commands
done


控制循环

break

continue

他们都可以指定跳出/继续的循环层数

break n

continue n

n默认都为1

处理循环的输出

可以在循环的done之后接管输出,比如

for var in A B C
do
echo "$var"
done > out.txt

for var in A B C
do
echo "$var"
done | sort
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell