Chapter15 test比较
测试与判断
退出程序命令
exit
exit 10 返回10给shell,返回值非0位不正常退出
$? 判断当前shell前一个进程是否正常退出
vim 8.sh
#!/bin/bash
# demo exit
pwd
exit
bash 8.sh
测试命令test
1.test命令用于检查文件或者比较值。
2.test可以做以下测试:
文件测试,整数比较测试,字符串测试。
3.test测试语句可以简化为 []
符号。
4.[] 符号还有扩展写法 [[]]
,支持&& || < >
#使用man test查看test用法
usage:test EXPRESSION,也可以用中括号代替test,推荐使用。
#字符串测试,test区分大小写。
STRING1 = STRING2 #字符串相等
STRING1 != STRING2 #字符串不相等
-z STRING #字符串长度为0
#整数比较,使用单个中括号时要用下面的字母,两个中括号连用时,可以用符号,如大于号小于号等。
INTEGER1 -eq INTEGER2 #equal
INTEGER1 -ge INTEGER2 #greater or equal
INTEGER1 -gt INTEGER2 #greater
INTEGER1 -le INTEGER2 #less or equal
INTEGER1 -lt INTEGER2 #less than
#对文件的判断
[-d /etc/ ] #-d file 文件存在并且是目录
[-e /etc/ ] #-e file 文件存在
[-d /etc/passwd ] #-f file 文件存在并且是一个普通文件
Chapter16 if判断的使用
使用if-then语句
if-then语句的基本用法:
if [ 测试条件成立 ] 或 命令返回值是否为0
then 执行相应命令
fi 结束
#if [] 来判断用户ID
if [ $UID =0 ]
then
echo "root user"
fi
#if command 使用pwd做测试
if pwd
then
echo " pwd running"
fi
Chapter17 if-else判断的使用
使用if-then-else语句
只有单一的条件,非此即彼的关系才使用。
if-then-else语句可以在条件不成立时也运行相应的命令:
if [ 测试条件成立 ]
then 执行相应命令
else 测试条件不成立,执行相应命令
fi 结束
举例:
#判断当前用户是否是root
vim 9.sh
#!/bin/bash
#if else demo
if [ $USER = root];then
echo "root user"
else
echo "other user"
fi
chmod u+x 9.sh
使用if-elif-else语句
if-then-else语句可以在条件不成立时也运行相应的命令,即三种并列,添加了两种条件。
if [ 测试条件成立 ]
then 执行相应命令
elif [ 测试条件成立 ]
then 执行相应命令
else 测试条件不成立,执行相应命令
fi 结束
#判断当前用户
vim 10.sh
#!/bin/bash
#root user1 other
if [ $USER = root ];then
echo "root"
elif [ $USER = user1 ];then
echo "user1"
else
echo " other user"
fi
Chapter18 嵌套if的使用
简而言之就是,if满足一个条件后,再去判断,再执行。
if [ 测试条件成立 ]
then 执行相应命令
if [ 测试条件成立 ]
then 执行相应命令
fi
fi 结束
vim 11.sh
#!/bin/bash
#demo if then if then fi fi
if [ $UID = 0 ];then
echo "please run"
if [ -x /tmp/10.sh ] ; then
/tmp/10.sh #判断10.sh是否有可执行权限
fi
else
echo " switch user root"
fi
Chapter19 case分支
与if可以互换,case语句和select语句可以构成分支。
这一部分并未进行深入学习。
case "$变量" in
"情况1" )
命令... ;;
"情况2")
命令... ;;
*);;
esac
vim 12.sh
#!/bin/bash
# case demo
case "$1" in
"start"|"START")
echo $0 start.....
;;
"stop")
echo $0 stop.....
;;
"restart"|"reload")
echo $0 restart.....
;;
*) #输入错误命令时会匹配*号。
echo "Usage: $0 {start|stop|restart|reload}"
;;
esac
Chapter20 循环
1.使用for循环遍历命令的执行结果
for循环的语法
for 参数 in 列表
do 执行的命令
done 封闭一个循环
*使用反引号或$()方式执行命令,命令的结果当作列表进行处理。
*列表中包含多个变量,变量用空格分隔
*对文本处理,要使用文本查看命令取出文本内容
*默认逐行处理,如果文本出现空格会当作多行处理。
{1..9} #花括号产生列表
mkdir {1..9} #产生9个目录
for i in {1..9}
do
echo hello ;echo $i
done
#对文件批量改名,这一部分代码我用着是报错的,并没有达到我的目的
for filename in 'ls *.mp3'
do
mv $filename $(basename $filename .mp3).mp4
done
#使用basename提取出.mp3前面的名字 usage: basename filename.扩展名 扩展名
2.使用for循环遍历变量和文件的内容
for循环更像是从列表中取出元素,处理完之后,再取出另一个元素。
2.1列表中包含多个变量,变量用空格分隔
2.2对文本处理,要使用文本查看命令取出文本内容
默认逐行处理,如果文本出现空格会当作多行处理。
Chapter21 C语言风格的for命令
这部分内容并未做深入了解,由于恐惧心理。
for ((变量初始化;循环判断条件;变量变化))
do
循环执行的命令
done
for (( i=1 ; i<=10;i++ ))
do
echo $i
done
Chapter22 while循环和until循环
while循环
写法:
while test测试一直成立
do
命令
done
until循环
与while循环相反,循环测试为假时,执行循环,为真时循环停止。
a=1
while [ $a -lt 10 ];
do ((a++));
echo $a;
done
#until的死循环
until [ 5 -lt 4 ];
do
echo always;
done
讲者说,while使用的更常见。
网友评论