Shell脚本for循环逐行原样输出
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本for循环逐行原样输出相关的知识,希望对你有一定的参考价值。
参考技术A 我在写Shell脚本时遇到了这样一个问题。需求:从文件中逐行遍历然后输出。
诶?
为什么和我源文件的行数不一致呢?
后来查资料发现:
bash shell会将下列字符当作字段分隔符:空格、制表符、换行符
如果我们想忽略掉这些分隔符,需要设IFS的变量值。
在for循环前加上这个IFS赋值操作就可以了
看,现在输出的结果和我们txt文件中的格式是一样的了。
但是这样赋值会有问题,如果脚本中其他方法也用到了for循环,可能影响其他for循环的输出结果,那我们可以用这种方式给IFS赋值
shell脚本——编程之循环语句(forwhileuntil)
shell脚本——编程之循环语句(for、while、until)
一、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循环逐行原样输出的主要内容,如果未能解决你的问题,请参考以下文章