一. while循环
1. while语法
[root@ test]# bash while_test.sh
55
[root@ test]# cat while_test.sh
#!/bin/bash
var=10
sum=0
while [[ $var -gt 0 ]]
do
let "sum+=var"
let "var--"
done
echo $sum
2. 使用while循环读取文件
使用管道符,将文件内容传递给while语句中,进行逐行的循环
[root@ test]# bash while_test.sh
name is gao , age is 1, sorce is 88
name is liang , age is 2, sorce is 66
name is xiao , age is 3, sorce is 78
[root@ test]# cat while_test.sh
#!/bin/bash
cat stu.txt | while read one_line
do
NAME=$(echo $one_line | awk '{print $1}' )
AGE=$(echo $one_line | awk '{print $2}' )
SCORE=$(echo $one_line | awk '{print $3}' )
echo name is $NAME , age is $AGE, sorce is $SCORE
done
echo $sum
相关语法简述:
read name
用于读取标准输入的单行数据,name代表要读取的标准输入
awk
语法
[root test]# awk '{pattren action}' filename
例子1:
执行awk时,它依次对/etc/passwd文件中的每一行执行print命令
[root@ test]# awk '{print $0}' /etc/passwd
root:x:0:1013:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
例子2:
echo的输出作为awk的输入,输出这一行输入中的第一个元素
[root test]# echo "11 22 33" | awk '{print $1}'
11
详细语法见ing
3. 使用重定向
[root@ test]# cat while_test.sh
#!/bin/bash
while read one_line
do
NAME=$(echo $one_line | awk '{print $1}' )
AGE=$(echo $one_line | awk '{print $2}' )
SCORE=$(echo $one_line | awk '{print $3}' )
echo name is $NAME , age is $AGE, sorce is $SCORE
done < stu.txt
echo $sum
二. select循环
1. 语法
select是一种菜单拓展循环方式,语法和带列表的for类似,如下:
select var in list
do
commond
done
主要功能:判断用户输入的功能
当程序运行到select语句时,会自动将列表中所有元素生成为可用1,2,3等数选择的列表,并等待用户输入。用户输入并回车后,select可判断输入并执行后续命令。
2. 与case一起使用
[root@t test]# bash select_case_test.sh
1) Mon
2) Tue
3) Wed
4) Thu
5) Fri
6) Sat
7) Sun
#? 1
Today is Monday
#? 2
Today is Tuesday
#? 121
input is error
[root@t test]# cat select_case_test.sh
#!/bin/bash
day_var="Mon Tue Wed Thu Fri Sat Sun"
select day in $day_var
do
case $day in
Mon) echo "Today is Monday";;
Tue) echo "Today is Tuesday";;
Wed) echo "Today is Wednesday";;
Thu) echo "Today is Thursday";;
Fri) echo "Today is Friday";;
Sat|Sun) echo "Today is weekend";;
*) echo "input is error" && break;;
esac
done