【shell基础(12)循环之while、select】while:管道、重定向循环读取文件;select:菜单拓展循环

本文介绍了Linuxshell脚本中的while循环和select循环。while循环主要用于处理条件判断,结合awk命令可以方便地解析文件内容。select循环提供了一种交互式的菜单选项,常与case语句配合使用,实现用户输入的判断功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值