目录
(1)for循环的常见用法
① 带列表的for循环
带列表的for循环用于执行一定次数的循环,其语法结构如下:
for 变量名 in 取值列表
do
命令序列
done
- for VARIABLE in (list)
- do
- command
- done
-
- for fruit in apple orange banana pear
- do
- echo "最爱吃的水果:$fruit"
- done
- echo "没有其他爱吃"
- [root@localhost ~]# sh fruit.sh
- 最爱吃的水果:apple
- 最爱吃的水果:orange
- 最爱吃的水果:banana
- 最爱吃的水果:pear
- 没有其他爱吃
也可以将列表的内容换成变量,循环的时候读取变量的值;或者in后面的内容可以是任意命令的标准输出。例如:
- sum=0
- for VAR in `seq 1 100`
- do
- let "sum+=VAR"
- done
- echo "总和是: $sum"
- ~
- [root@localhost ~]# sh sum.sh
- 总和是: 5050
② 不带列表的for循环
不带列表的for循环如下所示:
- for VARIABLE in (list)
- do
- command
- done
-
使用不带列表的for循环时,需要运行脚本时通过参数的方式给变量传值。例如:
- sum=0
- for VAR
- do
- let "sum+=VAR"
- done
- echo "总和是: $sum"
- [root@localhost ~]# sh sum.sh 7 8 9
- 总和是: 24
③ 类C的for循环
shell支持类C的for循环,语法结构如下:
- for ((expression1;expression2;expression3))
- do
- command
- done
- for ((i=1,j=100;i<=10;i++,j--))
- do
- echo "i=$i,j=$j"
- done
- ~
- ~
- [root@localhost ~]# sh for.sh
- i=1,j=100
- i=2,j=99
- i=3,j=98
- i=4,j=97
- i=5,j=96
- i=6,j=95
- i=7,j=94
- i=8,j=93
- i=9,j=92
- i=10,j=91
④ for的无限循环
无限循环又叫死循环,使用类C的for循环,只要保证expression2条件为真即可,会一直运行,直到按下Ctrl+C组合键
- for ((i=0;i<1;i+=0))
- do
- echo "i=$i"
- done
- ~
- i=0
- i=0
- i=0
- i=0
- i=0
- i=0
- i=0
- i=0
- i=0
- i=0
- i=0
- ^C
(2)for循环原理
for语句需要定义一个变量和取值列表,根据不同的取值执行相同的命令,知道变量值用完。
取值列表里包含多个属性相同的对象,例如:IP地址,通信录等。


echo用于输出字符串或提取Shell变量的值
格式:echo [参数] [字符串]
表1 常用转义符号及含义
| 转义符号 | 含义 |
| -n | 表示输出不换行 |
| -E | 禁止反斜杠转义,与-e参数功能相反 |
| -e | 输出转义字符,将转义后的内容输出到屏幕上 |
| \b | 相当于退格键,但前提是“\b”后存在字符;“\b"表示删除前一个字符;”\b\b"表示删除前两个字符 |
| \c | 不换行输出。后面无字符时相当于 echo -n;"\c"后有字符时,将不被输出 |
| \n | 换行,但是换行后的新行从“\n”处开始另起一行 |
| \f | 换行,但是换行后的新行的开头位置连接着上一行的行尾 |
| \v | 与\f相同-E 禁止反斜杠转义,与-e参数功能相反 |
| \t | 转义后表示插入tab,即横向制表符 |
| \r | 光标移至行首,但不换行,相当于使用“\r”以后的数字覆盖之前相等长度的字符 |
| | 表示插入“\”本身 |
(1)echo -n 不换行输出
- echo a
- echo b
- echo c
- echo "......"
- echo -n a
- echo -n b
- echo -n c
- [root@localhost ~]# sh test.sh
- a
- b
- c
- ......
- abc[root@localhost ~]#
(2)echo -e 转义字符; \b退格 不换行输出
删除相应个数的字
- [root@localhost ~]# echo -e "abcd"
- abcd
- [root@localhost ~]# echo -e "abc\bd"
- abd
- [root@localhost ~]# echo -e "ab\b\bcd"
- cd
(3)echo -e \c 不换行输出
- [root@localhost ~]# echo -e "abcd\c"
- abcd[root@localhost ~]#
(4)echo -e \n 换行输出
可在末尾
- abcd[root@localhost ~]# echo -e "abcd\n"
- abcd
-
也可以在中间
- [root@localhost ~]# echo -e "ab\ncd"
- ab
- cd
(5)echo -e \f、\v换行输出
- [root@localhost ~]# echo -e "abcd\fnice"
- abcd
- nice
- [root@localhost ~]# echo -e "abcd\vbeauty"
- abcd
- beauty
(6)echo -e \r 光标移至行首不换行
- [root@localhost ~]# echo -e "abcd\r123"
- 123d
计算从1到100所有整数的和
(1)脚本截图

(2)运行结果

提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
(1)脚本截图

(2)运行结果


求从1到100所有整数的偶数和、奇数和
偶数和
(1)脚本截图

(2)运行结果

奇数和
(1)脚本截图

(2)运行结果

用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码
(1)脚本截图
(2)运行结果
用户不存在

用户存在密码不存在

检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
(1)脚本截图

(2)运行结果

用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
(1)脚本截图

(2)运行结果

使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数
减法
(1)脚本截图

(2)运行结果

除基逆序取余
(1)脚本截图

(2)运行结果

某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,请问这只猴子在第一天总共摘了多少根香蕉?
(1)脚本截图

(2)运行结果
![]()
(1)99乘法表


(2)倒三角 99乘法表

