Shell 学习(9)Bash 的循环

循环中的 condition 与 if 中的 condition 概念(取扩展、test命令、普通命令的退出码,还可以逻辑运算执行)是一样的。

while 循环

condition 为 true 时执行。

语法:

# 第一种
while true; do
    commands
done

# 第二种
while true
do
    commands
done

until 循环

condition 为 false 时执行。与 while 正好相反,当 condition 为 true 时停止执行。

语法:

# 第一种
until false; do
    commands
done

# 第二种
until false
do
    commands
done

for...in 循环

遍历列表的每一项。

语法:

# 第一种
for variable in list; do
  commands
done

# 第二种
for variable in list
do
  commands
done

那么数据源可以是哪些呢?

1、可以直接读取in后面的值,默认以空白符作为分隔

Shell script

#!/bin/bash

for v in a b      c; do
    echo ${v}
done;

输出:

a
b
c

2、读取变量中的值

#!/bin/bash

words="Word1 Word2 Word3"
for word in ${words}; do
  echo "${word}"
done

输出:

Word1
Word2
Word3

3、通过命令读取文件中的 Word

content.txt

abc
123
a  b  c

Shell script

#!/bin/bash

count=0
for i in $(cat ./content.txt); do
  count=$((count + 1))
  echo "Word $count ($i) contains $(echo -n $i | wc -c) characters"
done

输出:

Word 1 (abc) contains 3 characters
Word 2 (123) contains 3 characters
Word 3 (a) contains 1 characters
Word 4 (b) contains 1 characters
Word 5 (c) contains 1 characters

for 循环

语法:

# 第一种
for (( expression1; expression2; expression3 )); do
  commands
done

# 第二种
for (( expression1; expression2; expression3 ))
do
  commands
done

# 死循环
for ((;;)); do 
  commands
done

for ((;;))
do 
  commands
done

expression1用来初始化循环条件,expression2用来决定循环结束的条件,expression3在每次循环迭代的末尾执行,用于更新值。

for 循环栗子:

#!/bin/bash

for ((i = 0; i < 5; i++))
do
    echo "${i}"
done

输出:

0
1
2
3
4

死循环栗子:

for ((;;))
do
  read var
  if [ "${var}" = "." ]; then
    break
  fi
  echo "Input: ${var}"
done

break,continue

break:立即终止循环,退出循环

栗子:

#!/bin/bash

for number in 1 2 3 4 5 6
do
  echo "number is $number"
  if [ "$number" = "3" ]; then
    break
  fi
done

continue:终止本次循环,开始下一次循环

栗子:

#!/bin/bash

while read -p "What file do you want to test?" filename
do
  if [ ! -e "$filename" ]; then
    echo "The file does not exist."
    continue
  fi

  echo "You entered a valid file.."
done

select 结构

  1. 根据提供的 list 去生成一个提供给用户选择的菜单,list 的项与菜单项一一对应。
  2. 生成的菜单项的编号是从1开始递增的。
  3. 当用户输入编号后,执行 do 中的处理。
  4. 用户选择的项的编号可以通过${REPLY}环境变量获取。
  5. 若用户直接回车,Bash 会重新输出菜单让用户选择。
  6. do 中的处理执行完毕后,重复这个过程。
  7. 可以在 select 结构中使用 break & continue

语法:

select name in [list]
do
  commands
done

栗子:

#!/bin/bash

select selected in Huawei, iPhone, Xiaomi
do
  echo "You've chosen ${REPLY}: ${selected}"
done

结合 case 使用:

#!/bin/bash

echo "Which Operating System do you like?"

select os in Ubuntu LinuxMint Windows8 Windows10 WindowsXP
do
  case $os in
    "Ubuntu"|"LinuxMint")
      echo "I also use $os."
    ;;
    "Windows8" | "Windows10" | "WindowsXP")
      echo "Why don't you try Linux?"
    ;;
    *)
      echo "Invalid entry."
      break
    ;;
  esac
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值