linux basic knowledge

shell脚本学习(四)[判断和循环]

2020-01-21  本文已影响0人  巩翔宇Ibrahimovic

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使用的更常见。

上一篇 下一篇

猜你喜欢

热点阅读