Linux非编辑循环语句,Linux shell的条件判断、循环语句及实例

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]:代表轮替

c5023d28b38dea3d7494813b7a294183.png

与用户交互:

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

d009d680e9d9e9893057e44292602e97.png

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

0db9e553b2d80497930020cfd3ba9ff5.png

80ebb2a252d0aa534744eed8a37c305b.png

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

a9da7ee592d7bc3efc07341eb5e843df.png[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

29324c23778fb298e5a730eca3c32834.png

until 循环:

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

语法格式:

until expression

do

command

done

42aa362112fbacd77980dc614d1af4f0.png[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

f243e4a13ccf4797d24b0ae2d2963a63.png

死循环:

while true; do

循环体

if CONDTION; then

break

fi

done

until false; do

循环体

if CONDITION; then

break

fi

done

4bda4d55b750e65a7f3597194df4967a.png

while循环的特殊用法:

遍历文件的每一行:

while read VARIABLE; do

循环体

done < /PATH/FROM/SOME_FILE

d516571f8744960eca24bae2b9f59439.png

for循环的特殊用法:

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

循环体

done

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

expr2: 循环控制条件;

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

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

expr3: 修正控制变量

db479357144c2a225f1a50d5097903dc.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值