该系列是基于牛客Shell题库,针对具体题目进行查漏补缺,学习相应的命令。
刷题链接:牛客题霸-Shell篇。
该系列文章都放到专栏下,专栏链接为:《专栏:Linux》。欢迎关注专栏~
本文知识预告:
- 首先学习用于用于输出连续的数字、固定间隔的数字、指定格式的数字的
seq
命令; - 然后给出了三种语法格式的for循环的使用;
- 最后给出三种题目解决方案,都是有必要掌握的方法!
题目:SHELL3输出0到500中7的倍数
写一个 bash脚本以输出数字 0 到 500 中 7 的倍数(0 7 14 21…)的命令
相关命令学习
seq
:打印数字序列
seq
命令用于输出连续的数字、固定间隔的数字、指定格式的数字。
语法格式: seq [参数]
常用参数:
-f | 格式 |
---|---|
-s | 字符串 |
-w | 在列前添加0 使得宽度相同 |
具体示例如下:
输出连续的数字
lucky@DESKTOP-VQ8KID4:~$ seq 1 10
1
2
3
4
5
6
7
8
9
10
表示: 输出所有1到100之间的数字;
输出固定间隔的数字
lucky@DESKTOP-VQ8KID4:~$ seq 0 3 10
0
3
6
9
表示: 输出所有0到10内3的倍数;
输出指定格式的数字
-s
用于使用指定的字符串分割数字
lucky@DESKTOP-VQ8KID4:~$ seq -s "+" 1 10
1+2+3+4+5+6+7+8+9+10
表示:输出1到10之间的数字,每个数字间由+
号间隔;
-f
使用print
样式的浮点格式输出,默认使用%g
lucky@DESKTOP-VQ8KID4:~$ seq -f "file%g" 1 5
file1
file2
file3
file4
file5
for
循环
实现for
循环的方式有三种:
- 带循环
list
的for
循环 - 不带循环
list
的for
循环 - C语法结果的
for
循环。
带循环list
的for
循环
- 实现一:依次输出训练
list
中的内容 【list
内容可以是数字也可以是字符串】
for item in 1 4 5 hello world
do
echo $item
done
- 实现二:依次输出一个范围内的值,如下为输出1到5的值
for item in {1..5}
do
echo $item
done
- 实现三: 设置输出的间隔值,如下为间隔2输出【也就是输出10以内的所有奇数】
for item in {1..10..2}
do
echo $item
done
- 实现四: 输出当前目录下所有的文件和文件夹
for file in $(ls)
do
echo $file
done
或者
for file in *
do
echo $file
done
不带循环list
的for
循环
将输入的参数循环输出【这里使用@
来获取参数列表】,脚本test.sh
内容如下:
lucky@DESKTOP-VQ8KID4:~$ cat param.sh
echo "input the world:"
for item in "$@"
do
echo $item
done
echo "total param : $#"
lucky@DESKTOP-VQ8KID4:~$ bash param.sh hello world
input the world:
hello
world
total param : 2
【备注】$@
获取参数列表内容; $#
获取输入参数的个数。
C语法结果的for
循环
基本是C语言的语法:
lucky@DESKTOP-VQ8KID4:~$ cat param.sh
for ((i=0;i<=10;i+=3))
do
echo $i
done
lucky@DESKTOP-VQ8KID4:~$ bash param.sh
0
3
6
9
题目解决方案
方法一:seq
命令
利用seq
命令输出固定间隔的数字
seq 0 7 500
方法二:for
循环
从0数到500,每个数字对7进行取模。如果%7=0
,则表示该数为7的倍数
for i in {0..500}; do
if [[ i%7 -eq 0 ]]; then
echo $i
fi
done
设置输出的间隔值为7,也可满足输出的数都是7的倍数
for num in {0..500..7}
do
echo "${num}"
done
方法三:while
循环
从0数到500,每个数字对7进行取模。如果%7=0
,则表示为倍数
num=0
while (($num <= 500)); do
if (($num % 7 == 0)); then
echo $num
fi
let num++
done
初始值为0,可直接输出,以7为倍数进行自增并输出。得到的结果都是满足题意
num=0
while (($num <= 500)); do
echo $num
let num+=7
done