shell while循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell while循环相关的知识,希望对你有一定的参考价值。

if [ ! -e $b ]
then echo "File $b not found!Do you want to create a new file named $b?\n1.Yes\n2.No\n"
read c

if [ $c = "1" ]
then touch $b
echo "File $b created success."
elif [ $c = "2" ]
then continue
else echo "Error!Please choose 1 or 2."
fi

while [ $c != "1" && $c != "2" ]
do
echo "Do you want to create a new file named $b?\n1.Yes\n2.No\n"
read c
if [ $c = "1" ]
then touch $b
echo "File $b created success."
elif [ $c = "2" ]
then continue
else echo "Error!Please choose 1 or 2."
fi
done

elif [ -d $b ]
then
cd $b
ls
else cat $b
fi
while 报错不能执行

while [ $c != "1" && $c != "2" ]

改成

while [[ $c != "1" && $c != "2" ]]

或者

while [ $c != "1" -a $c != "2" ]

另外,如果像这样是输入1或者2,建议换成 select 语句。

参考技术A &&不是在test[]中用的,他是在两个[]之间使用的,如:
[] && []
如果你只想使用一个条件测试的话可以这样
[ -a ]
你这个错误属于语法错误!
参考技术B while [ $c != "1" && $c != "2" ] 改成

while [[ $c != "1" ] && [ $c != "2" ]]本回答被提问者采纳
参考技术C 变量b是什么东西?你一上来就来个if [ ! -e $b ] 你让脚本怎么继续?

shell while循环与until循环

while 循环是 Shell 脚本中最简单的一种循环,当条件满足时,while 重复地执行一组语句,当条件不满足时,就退出 while 循环。

unti 循环和 while 循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环,until 的使用场景很少,一般使用 while 即可。


Shell while 循环的用法如下:

while循环的用法until循环的用法说明

while condition
do
    statements
done

  1. 在 while 循环体中必须有相应的语句使得 condition 越来越趋近于“不成立”,只有这样才能最终退出循环

until condition
do
    statements
done

  1. 在 until 循环体中必须有相应的语句使得 condition 越来越趋近于“成立”,只有这样才能最终退出循环
  1. condition表示判断条件,statements表示要执行的语句(可以只有一条,也可以有多条)
  2. while中的条件满足时进行循环,until中的条件不满足时进行循环
举栗脚本结果
计算从 m 加到 n 的值

 

while脚本until脚本
  1. #!/bin/bash
  2. read -p ‘input first value: m
  3. read -p ‘input second value: n
  4. if [[ -z $m || -z $n ]]
  5. then echo ‘the input should not be empty
  6. fi
  7. sum=0
  8. while ((m<=n))
  9. do
  10. ((sum+=m))
  11. ((m++))
  12. done
  13. echo ‘the sum is: $sum
#!/bin/bash
  1. read -p ‘input first value: m
  2. read -p ‘input second value: n
  3. if [[ -z $m || -z $n ]]
  4. then echo ‘the input should not be empty
  5. fi
  6. sum=0
  7. until ((m>n))
  8. do
  9. ((sum+=m))
  10. ((m++))
  11. done
  12. echo ‘the sum is: $sum

 

  1. input first value: 1
  2. input second value: 100
  3. the sum is: 5050
  1. input first value: 7
  2. input second value: 3
  3. the sum is: 0
  1. input first value: 5
  2. input second value: r #r被当做0使用
  3. the sum is: 0
  1. input first value: r #r被当做0使用
  2. input second value: 2
  3. the sum is: 3

while的判断条件与until的判断条件恰好相反。。

实现一个简单的加法计算器,用户每行输入一个数字,计算所有数字的和
  1. #!/bin/bash
  2. sum=0
  3. echo "请输入您要计算的数字,按 Ctrl+D 组合键结束读取"
  4. while read n
  5. do
  6. ((sum += n))
  7. done
  8. echo "The sum is: $sum"

运行结果:

12↙
33↙
454↙
6767↙
1↙
2↙
The sum is: 7269

在终端中读取数据,可以等价为在文件中读取数据,按下 Ctrl+D 组合键表示读取到文件流的末尾,此时 read 就会读取失败,得到一个非 0 值的退出状态,从而导致判断条件不成立,结束循环。




以上是关于shell while循环的主要内容,如果未能解决你的问题,请参考以下文章

shell while循环与until循环

shell脚本while循环语句

Shell while循环详解

做了一个shell的while循环,报错不能执行,能不能帮忙看看,谢谢啦

Shell脚本之while循环

Shell while循环语句中的陷阱