Shell脚本for循环逐行原样输出

Posted

tags:

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

参考技术A 我在写Shell脚本时遇到了这样一个问题。
需求:从文件中逐行遍历然后输出。

诶?
为什么和我源文件的行数不一致呢?

后来查资料发现:
bash shell会将下列字符当作字段分隔符:空格、制表符、换行符
如果我们想忽略掉这些分隔符,需要设IFS的变量值。
在for循环前加上这个IFS赋值操作就可以了

看,现在输出的结果和我们txt文件中的格式是一样的了。
但是这样赋值会有问题,如果脚本中其他方法也用到了for循环,可能影响其他for循环的输出结果,那我们可以用这种方式给IFS赋值

shell脚本——编程之循环语句(forwhileuntil)

一、echo命令 – 输出字符串或提取Shell变量的值

1、格式

echo [参数] [字符串]

2、常用参数

常用参数说明
-n表示输出不换行
-E禁止反斜杠转义,与-e参数功能相反
-e输出转义字符,将转义后的内容输出到屏幕上
\\b相当于退格键,但前提是“\\b”后存在字符;"\\b"表示删除前一个字符;"\\b\\b"表示删除前两个字符
\\c不换行输出。后面无字符时相当于 echo -n;"\\c"后有字符时,将不被输出
\\n换行,但是换行后的新行从“\\n”处开始另起一行
\\f换行,但是换行后的新行的开头位置连接着上一行的行尾
\\v与\\f相同
\\t转义后表示插入tab,即横向制表符
\\r光标移至行首,但不换行,相当于使用“\\r”以后的数字覆盖之前相等长度的字符
\\表示插入“\\”本身

二、for循环

读取不同的变量值,用来逐个执行同一组命令

for 变量名 in 取值列表
do                   
   命令序列
done

在这里插入图片描述

三、while循环

只要条件成立,则反复循环,不成立即停止

while 条件测试操作
do
   命令序列
done

在这里插入图片描述

四、until循环

重复测试某个条件,只要条件不成立则反复循环

until 条件测试操作
do  
   命令序列
done

在这里插入图片描述

五、例题

  • 写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
[root@promote opt]#vim shopping.sh

#!/bin/bash
#每家商店有五种商品选购,每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
#衣服500元
#裤子400元
#鞋子300元
#帽子150元
#袜子50元

sum=0
for ((;;))
do
 echo "1、衣服:500元"
 echo "2、裤子:400元"
 echo "3、鞋子:300元"
 echo "4、帽子:150元"
 echo "5、袜子:50元"

read -p "请选择您想要购买的商品:" a
case $a in
1)
  echo "您已购买了衣服500元"
  let sum+=500
;;
2)
  echo "您已购买了裤子400元"
  let sum+=400
;;
3)
  echo "您已购买了鞋子300元"
  let sum+=300
;;
4)
  echo "您已购买了帽子150元"
  let sum+=150
;;
5)
  echo "您已购买了袜子50元"
  let sum+=50
;;
*)
  echo "欢迎下次光临,您本次消费共计$sum元"
break
esac

read -p "您选择继续购物还是结算购物车?(y/n)" b
if [ $b = y ] ; then
continue
elif [ $b = n ] ; then
  echo "欢迎下次光临,您本次购物共计消费$sum元"
break
else
  echo "请您正确输入"      
fi
done

以上是关于Shell脚本for循环逐行原样输出的主要内容,如果未能解决你的问题,请参考以下文章

shell ps -ef命令逐行读取

05Shell循环语句

Linux系统shell脚本for循环实战之目录权限

shell脚本——编程之循环语句(forwhileuntil)

如何在Shell脚本中逐行读取文件

Shell脚本------循环语句(for,while,until循环语句)