接续上节讲述for循环以及接下介绍while循环
seq数字数列
for循环如果想要循环次数变多的情况,手动建设循环列表是不可行的,可以引用C语言框架,当然也可以使用seq构造数列。例如构造1-10的循环数列,我们让其循环10次。
for num in $(seq 10); do
echo "循环次数为$num"
done
上述代码我们引用seq 生成数字数列,循环代码会先执行$(seq 10)的代码,seq后面跟着的数字如果只有一个,那默认是尾部,就是循环到多少个数字。
那我们想要改变默认从1开始,想从3开始到10直接在seq后面填入开始数字和结束数字即可。
for num in $(seq 3 10); do
echo "$num"
done
那我们要想指定数量为双数怎么办,比如双数循环,单数不循环,有个seq的专业名词叫指定步长
for num in $(seq 2 2 10); do
echo "$num"
done
seq完整的语句是开始数字,步长,结束数字。上述代码可以打印出增量为2的数字,既双数。
while循环
循环不仅仅有for,同样有while循环,shell中while循环和for循环语句基本一致
代码如下:
while [循环条件]; do
循环体
done
其中while循环中的循环条件是可以进行判断的,例如是否相等,是否大于小于等等,如果满足这个条件,就进行循环,如果不满足就跳出循环。
判断条件可以使用-eq
(等于)、-ne
(不等于)、-gt
(大于)、-lt
(小于)、-ge
(大于等于)和-le
(小于等于)这些比较运算符,也可以使用 == (恒等于)!=(不等于)来比较字符串。
例如:
read -p "请输入你的年龄:" age
while [ $age -eq 18 ]; do
echo "True"
done
上述代码会接受用户输入年龄,当输入的值等于18时,就一直循环输出True。
那么我们也可以用true做个死循环,程序执行默认条件为真。
while true; do
echo "这是个死循环"
done
除开死循环之类代码,我们也可以做判断文件是否存在,其中判断文件是否存在(-e
)、是否是目录(-d
)、是否是普通文件(-f
)等
例如:
file= "passwd.txt"
while [! -e $file];do
echo "正在创建文件。。。"
touch $file
done
echo "passwd 文件已经存在"
我们可以通过上述代码判断文件是否存在,当文件不存在就创建,如果不是就输入文件已存在。
while循环可以和read
命令结合来逐行读取文件内容
file="data.txt"
while read line; do
echo $line
done < $file
根据上文代码我们可以循环读取data文件内容,并且一行一行打印出来,直到读取完毕。
标签:do,shell,seq,echo,while,循环,done From: https://blog.csdn.net/weixin_45476967/article/details/144009733