如何写网站代码是什么原因,深圳市工程交易服务网,建材网站建设哪家,企业 网站 客户留言怎么做目录
for循环
带列表循环
不带列表循环
类C风格循环
while循环
语法
无限循环
使用示例
until循环
基本语法
示例
select循环
语法格式
嵌套循环
break和continue
break的使用
continue的使用 在shell 中循环有以下几种#xff1a;
for 循环 while …目录
for循环
带列表循环
不带列表循环
类C风格循环
while循环
语法
无限循环
使用示例
until循环
基本语法
示例
select循环
语法格式
嵌套循环
break和continue
break的使用
continue的使用 在shell 中循环有以下几种
for 循环 while 循环 until 循环select 循环break 和 continue
for循环 在shell中for循环有两种情况
带列表循环不带列表循环
带列表循环 语法
for 循环变量 in 列表
do执行语句...
done 在语法中循环变量是每次循环时得到的列表的某一数据当循环一次结束后再获取另一个数然后再执行 do 里面的语句依此类推直到列表中数据循环完结 for 循环中的列表中的数据是以空格来进行分隔的
示例 直到列出列表的所有元素
代码示例
[rootopenEuler ~]# cat for1.sh
#!/bin/bashfor var in 192.168.72.130 192.168.72.131 192.168.72.132
doecho $var
done
[rootopenEuler ~]# bash for1.sh
192.168.72.130
192.168.72.131
192.168.72.132
还可以修改如下
[rootopenEuler ~]# cat for1.sh
#!/bin/bashfor var in 192.168.72.13{0..3}
doecho $var
done
[rootopenEuler ~]# bash for1.sh
192.168.72.130
192.168.72.131
192.168.72.132
192.168.72.133
还可以使用 seq 命令来生成列表数据
[rootopenEuler ~]# cat for1.sh
#!/bin/bashfor var in $(seq -f 192.168.72.13%1g 1 5)
doecho $var
done
[rootopenEuler ~]# bash for1.sh
192.168.72.131
192.168.72.132
192.168.72.133
192.168.72.134
192.168.72.135 在带列表的 for 循环中还可以指定循环的步长
语法
for 循环变量 in {开始..结束..步长}
do语句....
done
示例 循环输入1~10中的奇数
[rootopenEuler ~]# cat for2.sh
#!/bin/bashfor v in {1..10..2}
doecho $v
done
[rootopenEuler ~]# bash for2.sh
1
3
5
7
9
示例 获取根目录下所有文件名作为变量的值打印输出
代码示例
[rootopenEuler ~]# cat for3.sh
#!/bin/bashfor file in $(ls -F / | grep -v /$)
doecho $file
done[rootopenEuler ~]# bash for3.sh
bin
lib
lib64
sbin
示例 打印出如下的语句中字符数不大于6的单词 hello world rabbit favorite eat apple cabbage
代码示例
[rootopenEuler ~]# cat for4.sh
#!/bin/bashfor word in hello world rabbit favorite eat apple cabbage
doif [ expr length ${word} -le 6 ]; thenecho $wordfi
done
[rootopenEuler ~]# bash for4.sh
hello
world
rabbit
eat
apple
不带列表循环
语法
for 循环变量
do语句...
done
示例 循环输入所有的参数
代码示例
[rootopenEuler ~]# cat for5.sh
#!/bin/bashfor v in $
doecho $v
done
[rootopenEuler ~]# bash for5.sh
[rootopenEuler ~]# bash for5.sh {1..5}
1
2
3
4
5
类C风格循环
语法
for ((表达式1;表达式2;表达式3))
do语句
done
示例 批量创建用户用户名以 test 开头按数字序号变化一共添加30个账号名称如test01、test02、test03、......、test10、......、test30用户初始密码为Abc123456
代码示例
[rootopenEuler ~]# cat for6.sh
#!/bin/bashfor ((i1;i30;i))
doif [ $i -lt 10 ]; thenusertest0$ielseusertest$ifiif ! id -u $user /dev/nullthenuseradd $userecho Abc123456 | passwd --stdin $user /dev/nullelseecho $user is existsfi
done[rootopenEuler ~]# bash for6.sh
[rootopenEuler ~]# grep test /etc/passwd
test01:x:1001:1001::/home/test01:/bin/bash
test02:x:1002:1002::/home/test02:/bin/bash
test03:x:1003:1003::/home/test03:/bin/bash
test04:x:1004:1004::/home/test04:/bin/bash
方式二
[rootopenEuler ~]# cat for7.sh
#!/bin/bashfor u in seq -f test%02g 1 30
doif ! id -u $u /dev/nulluseradd $uecho Haha123123 | passwd --stdin $ufi
done
while循环
语法
while [ 条件表达式 ]
do语句语句
done
示例 循环输出1~10这几个数
代码示例
[rootopenEuler ~]# cat while1.sh
#!/bin/bashi1
while [ $i -le 10 ]
doecho $ilet i
done
示例 使用exec读取指定文件的内容并循环输出文件内容如下
[rootopenEuler ~]# cat myfile
open
openlab
openlab123
linux
readhat
代码示例 # 第一步创建文件及内容
[rootopenEuler ~]# cat myfile EOFopenopenlabopenlab123linuxreadhatEOF
[rootopenEuler ~]# cat myfile
open
openlab
openlab123
linux
readhat
# 第二步编写脚本来实现文件读取并循环输出
[rootopenEuler ~]# cat while2.sh
#!/bin/bashexec myfilewhile read line
doecho $line
done
[rootopenEuler ~]# bash while2.sh
open
openlab
openlab123
linux
readhat
方式二
[rootopenEuler ~]# cat while3.sh
#!/bin/bashwhile read line
doecho $line
done myfile
[rootopenEuler ~]# bash while3.sh
open
openlab
openlab123
linux
readhat
无限循环 在while的表达式中可以指定以下几个特殊值
true会一直循环而且它的状态返码是0false不做任何事情表示成功状态码为0作用与true相同都是进行无限循环
代码示例
[rootopenEuler ~]# while true ; do echo 123123 ; done #会一直循环[rootopenEuler ~]# while false ; do echo 123123 ; done
[rootopenEuler ~]# echo $?
0[rootopenEuler ~]# while : ; do echo 123123 ; done
使用示例 猜商品的价格通过变量RANDOM来获取随机的价格然后提示用户猜价格并记录次数猜中退出或次数达到5次也退出
代码示例
[rootopenEuler ~]# cat while4.sh
#!/bin/bashprice$[ $RANDOM % 100 ]
time0while true
doread -p Please enter product price [0-99]: inputlet timeif [ $input -eq $price ]; thenecho Good luck, you guessed it.echo You have guessed $time times.exit 0elif [ $input -gt $price ]; thenecho $input is to highelseecho $input is to lowfiif [ $time -eq 5 ]; thenecho You have guessed is 5 times. exitexit 1fi
done
[rootopenEuler ~]# bash while4.sh
Please enter product price [0-99]: 50
50 is to low
Please enter product price [0-99]: 80
80 is to high
Please enter product price [0-99]: 70
70 is to high
Please enter product price [0-99]: 60
60 is to low
Please enter product price [0-99]: 65
65 is to low
You have guessed is 5 times. exit
[rootopenEuler ~]#
示例 使用while读取文件文件的内容如下
192.168.72.131 22
192.168.72.132 23
192.168.72.133 22
要求 输出的格式为
IP: 192.168.72.131, PORT: 22
IP: 192.168.72.132, PORT: 23
IP: 192.168.72.133, PORT: 22
代码示例
# 1. 创建文件
[rootopenEuler ~]# cat ips
192.168.72.131 22
192.168.72.132 23
192.168.72.133 22# 2. 编写脚本
[rootopenEuler ~]# cat while6.sh
#!/bin/bashwhile read line
doIPecho $line|cut -d -f1 # 也可以使用awk来实现如IPecho $line|awk {print $1}PORT$(echo $line|cut -d -f 2)echo IP:$IP, PORT:${PORT}
done ips# 3. 运行测试
[rootopenEuler ~]# bash while6.sh
IP:192.168.72.131, PORT:22
IP:192.168.72.132, PORT:23
IP:192.168.72.133, PORT:22
until循环 until循环和while循环的作用是一样的都重复执行某些代码但是它和while循环也有区别until循环是条件不满足时才循环条件满足则退出而while循环是条件满足都循环而条件不满足则退出
基本语法
until [ 条件表达式 ]
do要重复执行的语句
done
示例 循环输出0~10之间的数
代码示例
[rootopenEuler ~]# cat until1.sh
#!/bin/bashi0#while [ $i -lt 10 ]
#do
# echo $i
# let i
#doneuntil [ $i -ge 10 ]
doecho $ii$((i1))
done[rootopenEuler ~]# bash until1.sh
0
1
2
3
4
5
6
7
8
9
select循环 select循环语句主要功能是创建选择菜单在执行带有select循环语句脚本时会输出按照数字列表
语法格式
select 变量名 [ in 菜单值列表 ]
do语句
done
示例 选择MySQL版本
代码示例
[rootopenEuler ~]# cat select1.sh
#!/bin/bashselect mysql_version in 5.6 5.7 8.0
doecho $mysql_version
done
[rootopenEuler ~]# bash select1.sh
1) 5.6
2) 5.7
3) 8.0
#? 2
5.7
#? 3
8.0
#? ^C
示例 选择水果假如有以下水果可以选择 Apple、Banana、Pear、Watermelons、Grape
代码示例
[rootopenEuler ~]# cat select2.sh
#!/bin/bashecho Choose your favorite fruit:
select fruit in Apple Banana Pear Watermelons Grape
doechoecho Your favorite fruit is $fruit.#break
done[rootopenEuler ~]# bash select2.sh
Choose your favorite fruit:
1) Apple
2) Banana
3) Pear
4) Watermelons
5) Grape
#? 1Your favorite fruit is Apple.
#? 2Your favorite fruit is Banana.
#? 4Your favorite fruit is Watermelons.
#? ^C
代码完善 在上面示例中没有办法在选择水果后退出它会一直让我们进行选择如果希望选择后退出则需要添加break
[rootopenEuler ~]# cat select2.sh
#!/bin/bashecho Choose your favorite fruit:
select fruit in Apple Banana Pear Watermelons Grape
doechoecho Your favorite fruit is $fruit.break
done[rootopenEuler ~]# bash select2.sh
Choose your favorite fruit:
1) Apple
2) Banana
3) Pear
4) Watermelons
5) Grape
#? 3Your favorite fruit is Pear.
[rootopenEuler ~]#
嵌套循环
示例 打印九九乘法表
[rootopenEuler ~]# cat ninetable.sh
#!/bin/bash
for i in seq 9
dofor j in seq 9do#[ $j -le $i ] echo -n $i*$j expr $i \* $j [ $j -le $i ] echo -n $i*$j echo $((i*j)) doneecho
done[rootopenEuler ~]# bash ninetable.sh
1*1 1
2*1 2 2*2 4
3*1 3 3*2 6 3*3 9
4*1 4 4*2 8 4*3 12 4*4 16
5*1 5 5*2 10 5*3 15 5*4 20 5*5 25
6*1 6 6*2 12 6*3 18 6*4 24 6*5 30 6*6 36
7*1 7 7*2 14 7*3 21 7*4 28 7*5 35 7*6 42 7*7 49
8*1 8 8*2 16 8*3 24 8*4 32 8*5 40 8*6 48 8*7 56 8*8 64
9*1 9 9*2 18 9*3 27 9*4 36 9*5 45 9*6 54 9*7 63 9*8 72 9*9 81
示例 打印三角形10行10列
[rootopenEuler ~]# cat triangle.sh
#!/bin/bashfor i in {1..9}
dofor ((col1;col10-i;col))doecho -n donefor ((k1; ki; k))doecho -n $i doneecho
done[rootopenEuler ~]# bash triangle.sh 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9
break和continue break是用于循环退出而continue是结束本次循环进入下一次循环
break的使用
示例
[rootopenEuler ~]# cat break.sh
#!/bin/bashfor i in seq 9
doif [ $i -eq 5 ] ; thenbreakelseecho $ifi
done
[rootopenEuler ~]# bash break.sh
1
2
3
4
continue的使用
示例
[rootopenEuler ~]# cat continue.sh
#!/bin/bashfor i in seq 9
doif [ $i -eq 5 ] ; thencontinueelseecho $ifi
done
[rootopenEuler ~]# bash continue.sh
1
2
3
4
6
7
8
9