码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2015-09-19 19:54:15      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:linux

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

/dev/null

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

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

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

/dev/zero

  Linux的输入设备,可以用他初始化文件,可以无限制输出0, 另一个作用是用0去填充一个指定大小的文件

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

脚本位置参数:

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

 其中特殊变量有:

    $?: 命令的状态结果;

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

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

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

 shift [n]:代表轮替

 技术分享

与用户交互:

    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 

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

     fi

技术分享

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只搜索相对一级路径下的内容不对第二级子目录进行分析

技术分享

技术分享

(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--

技术分享

[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

技术分享

until 循环:

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

语法格式:

until expression

do

    command

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++
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

技术分享

死循环:

while true; do

    循环体

    if CONDTION; then

        break

    fi

done


until false; do

    循环体

    if CONDITION; then

        break

    fi

done

技术分享

while循环的特殊用法:

遍历文件的每一行:

    while read VARIABLE; do

        循环体

    done < /PATH/FROM/SOME_FILE

技术分享

for循环的特殊用法:

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

    循环体

done


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

expr2: 循环控制条件;

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

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

expr3: 修正控制变量

技术分享

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

标签:linux

原文地址:http://canshan.blog.51cto.com/2613522/1696293

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!