Linux shell的条件判断、循环语句及实例

shell条件判断的两个特殊设备linux

/dev/nullshell

  linux系统的空设备,也称为位桶,任何写入其中的数据均会被丢弃当你不想将标准化输出显示或者保存至文件时能够将文件从定向到/dev/null
express

  禁止标准化输出 cat $filename > /dev/null
bash

  禁止标准化错误 rm $filename > /dev/nullide

/dev/zero函数

  Linux的输入设备,能够用他初始化文件,能够无限制输出0, 另外一个做用是用0去填充一个指定大小的文件测试

在条件判断语句中&&表示and ||表示or spa

脚本位置参数:
3d

 在linux中参数位置从命令后起依次日后,分别是0,1,2,3。。blog

 其中特殊变量有:

    $?: 命令的状态结果;

    $#: 传递给脚本或函数的参数的个数;

$*和$@: 引用传递给脚本或函数的参数列表;

    $$:脚本执行时所产生的进程

 shift [n]:表明轮替

 wKioL1X7piOj9GodAAMn3rOgScg629.jpg

与用户交互:

    read 用于读取来自键盘的变数

 格式: read [-pt] value

    -p:后面直接跟提示字符

    -t:后面直接接等待的时间『秒数』

[root@iZ28qzns9m4Z bashtest]# echo $a test
whoaaaaa test
[root@iZ28qzns9m4Z bashtest]# read -p "input:" -t 5 a
input:aaaaa
[root@iZ28qzns9m4Z bashtest]# echo $a
aaaaa
[root@iZ28qzns9m4Z bashtest]#

命令引用

     格式一: `命令`

     格式二:$(命令)

条件判断语句 if,then,case

  只有一个判断式的语句格式:

    if[条件];then

     命令  ==> 当条件为真时执行,若不仅一条时用换行符隔开

     fi

  须要进行判断时:

    if [条件];then

       条件成立时,须要输入的内容

     elif [条件二];then

       条件成立时,须要输入的内容

    else 

      条件与条件1、二均不成立时须要输入的内容

     fi

wKiom1X7l9eyQsG8AAKdU20_sRM359.jpg

case的判断结构也能够用于多分支:

  语法格式:

    case $变量名称 in

    "第一变量内容")command命令;;

    "第二变量内容")command命令;;

    "第三变量内容")command命令;;

    "第四变量内容")command命令;;

    ...

    *)command命令;;===》在以上条件均不匹配的条件下执行

    esac:

循环语句:for while until 

在linux 循环语句中 list 是一个重 点,他负责循环时所须要的列表元素,是由一个或多个空格或换行符分隔开的字符串组成,把列表的每一个字符串逐个赋值给VARIABLE表示的变量;

生成格式:

        数字:① list="1 2 3 4 5 6 10"  ==》 for var in ${list}
                  ② for var in {1..10}

[root@iZ28qzns9m4Z bashtest]# cat 1for.sh 
#!/bin/bash
#
#list="1 2 3 4 5 6 10"  #第一种
#for i in ${list}
#do
#    echo $i
#done
===================================
for i in {1..10}   #第二种
do
    echo $i
done

[root@iZ28qzns9m4Z bashtest]#

        (2) 直接给出列表
          (3) glob

    #!/bin/bash
    #
    for filename in /相对具体的路径/*; do
        file $filename
    done
    注:若是不是相对具体的路径,那么脚本会报错,filename只搜索相对一级路径下的内容不对第二级子目录进行分析

wKiom1X8Fp3iJHSXAAHEyQtz2ao252.jpg

wKiom1X8FeLCn9P4AAEUpXF1PKw863.jpg

(4) 命令生成

算术运算:

+, -, *, /, %, **


(1) $[$A+$B]

(2) $(($A+$B))

(3) let VARIABLE=$A+$B

(4) VARIABLE=$(expr $A + $B)

加强型赋值:

+=

sum=$[$sum+$i]

let sum+=$i

-=, *=, /=, %=


let count=$[$count+1]   --> let count+=1 --> let count++

let count=$[$count-1] --> let count-=1 --> let count--

wKiom1X8KLyic9pyAAFRd2x5Z6w221.jpg

[root@iZ28qzns9m4Z bashtest]# sh 4for-2.sh 
2500
[root@iZ28qzns9m4Z bashtest]# cat 4for-2.sh 
#!/bin/bash
sum=0
for i in $(seq 1 2 100)
do
	let "sum+=i"
done
echo $sum
[root@iZ28qzns9m4Z bashtest]#
for 运行前测试语句,用于建立重复循环

        格式: for var in ${list} 

               do

                 循环命令

              done

不带列表的for循环

 格式: for var

      do

       循环命令

    done

while循环:

while CONDTION; 

do

循环体

done

进入条件:当CONDITION为“真”;

退出条件:当CONDITION为“假”;

while CONDITION;

do

循环体

控制变量的修正表达式

done

while :

do

    command

done

wKiom1X8L67BNY-PAAHeES1EXC4666.jpg

until 循环:

    until命令和while命令相似,while能实现的脚本until一样也能够实现,但区别是until循环的退出状态是不为0,退出状态是为0(与while恰好相反),即whie循环在条件为真时继续执行循环而until则在条件为假时执行循环。

语法格式:

until expression

do

    command

done

wKiom1X87V2SQtPDAADij_jjRPI272.jpg

[root@iZ28qzns9m4Z bashtest]# cat 1until.sh 
#!/bin/bash
declare -i sum=0
declare -i i=1
until [[ "$i" -gt 10 ]]
do
	let sum+=i
	let i++
done
echo $sum
[root@iZ28qzns9m4Z bashtest]# sh -x 1until.sh 
+ declare -i sum=0
+ declare -i i=1
+ [[ 1 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 2 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 3 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 4 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 5 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 6 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 7 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 8 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 9 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 10 -gt 10 ]]
+ let sum+=i
+ let i++
+ [[ 11 -gt 10 ]]
+ echo 55
55
[root@iZ28qzns9m4Z bashtest]#

循环控制:

continue [n]:提早结束本轮循环,而直接进入下一轮;

break [n]:提早结束循环;


while循环:

while CONDITION; do

    .......

    if CONDITION2; then

        break [n]

    fi

done

[root@iZ28qzns9m4Z bashtest]# cat 1until.sh 
#!/bin/bash
declare -i sum=0
declare -i i=1
until [[ "$i" -gt 10 ]]
do
	let sum+=i
	let i++
if [ $i -eq 5 ]; then
   break
fi
echo $sum
done
[root@iZ28qzns9m4Z bashtest]# sh -x 1until.sh 
+ declare -i sum=0
+ declare -i i=1
+ [[ 1 -gt 10 ]]
+ let sum+=i
+ let i++
+ '[' 2 -eq 5 ']'
+ echo 1
1
+ [[ 2 -gt 10 ]]
+ let sum+=i
+ let i++
+ '[' 3 -eq 5 ']'
+ echo 3
3
+ [[ 3 -gt 10 ]]
+ let sum+=i
+ let i++
+ '[' 4 -eq 5 ']'
+ echo 6
6
+ [[ 4 -gt 10 ]]
+ let sum+=i
+ let i++
+ '[' 5 -eq 5 ']'
+ break
[root@iZ28qzns9m4Z bashtest]#

while CONDITION; do

    ......

    if CONDITION2; then

        continue [n]

    fi

    ......

done

wKiom1X886qRcGnTAAI90JruBr0002.jpg

死循环:

while true; do

    循环体

    if CONDTION; then

        break

    fi

done


until false; do

    循环体

    if CONDITION; then

        break

    fi

done

wKioL1X8-vbidepYAAZVO0-2Q2M235.jpg

while循环的特殊用法:

遍历文件的每一行:

    while read VARIABLE; do

        循环体

    done < /PATH/FROM/SOME_FILE

wKiom1X9CWPjqzanAAI0UlajyxU354.jpg

for循环的特殊用法:

for ((expr1;expr2;expr3)); do

    循环体

done


expr1: 定义控制变量,并初始赋值;

expr2: 循环控制条件;

    进入条件:控制条件为“真”

    退出条件:控制条件为“假”

expr3: 修正控制变量

wKiom1X9CqHAqxTRAAEoVdbF9tg334.jpg

相关文章
相关标签/搜索