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

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  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值