shell编程之循环语句与函数

echo命令

echo -n 表示不换行输出

echo -e 表示输出转义符

常用的转义符

二 date

date查看当前系统时间

-d 你描述的日期,显示指定字符串所描述的时间,而非当前时间

%F 完整日期格式,等价于 %Y-%m-%d

% T 时间(24小时制)(hh:mm:ss)

root@localhost \~\]# date -d '-1 day' +%F 2021-10-21 \[root@localhost \~\]# date +%F 2021-08-19 \[root@localhost \~\]# date -d '1 day ' +%F-%T 2021-08-20-23:28:42 \[root@localhost mnt\]# date -d "-3 day" 前三天 2021年 08月 18日 星期三 11:30:15 CST \[root@localhost mnt\]# date -d "+3 day" 后三天 2021年 08月 18日 星期三 11:30:15 CST \[root@localhost data\]#date -d '1 day ' +%F' '%T 2021-10-22 00:45:37 ![](https://file.jishuzhan.net/article/1751003233054101505/407d3121ff84cc3cbcedff001d2d9934.webp) ### 三 日历 \[root@localhost data\]#cal 2021 #查看日历 \[root@localhost data\]#cal 9 1752 ![](https://file.jishuzhan.net/article/1751003233054101505/b195235d143ace9286d0ee707b4b3d9e.webp) ### 四 $RANDOM 取值范围:0-32767 \[root@test1 \~\]# echo $\[$RANDOM%50

37

root@test1 \~\]# echo $\[$RANDOM%20

15

seq

root@localhost data\]#seq 1 2 10 #从1 开始 步长为2 到10 为止 1 3 5 7 9 \[root@localhost data\]#seq 9 -1 1 9 8 7 6 5 4 3 2 1 ### 六 循环的命令:for, while, until #### 1 for 列表循环 for 变量名 in {list} do command done #### 2 不带列表循环 for 变量名 do command done #### 3 while 相对于for,需要知道循环次数 我们只知道停止条件,不知道次数,就需要使用while,直到达到条件 while循环 :1、语法结构 2、死循环 while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环 实验:1元才是正确答案 [root@localhost ~]#cat mcb.sh #!/bin/bash p=`echo $[ RANDDM%1000+1 ]` time=0 while true do let time++ read -p "请输入你猜测的价格 (1-1000):" h if [ $h -eq $p ] then echo "恭喜你猜中了,你一共猜测了$time次" exit elif [ $h -gt $p ] then echo "你猜测的价格过高" else echo "你猜测的价格过低" fi done ![](https://file.jishuzhan.net/article/1751003233054101505/ede95073bc383cf56a493bc79d4dfbe3.webp) #### 4 双重循环及跳出循环 * break跳出单个循环 break n 数字数字是几代表跳出n层循环 * continue终止某次循环中的命令,但是不会完全终止命令 * exit 直接退出脚本 #### 5 until until 循环与 while 循环类似,while 循环能实现的脚本 until 同样也可以实现,但区别是while 循环在条件为真是继续执行循环,而 until 则是在条件为假时执行循环 until 循环语句的语法结构如下所示 until 条件测试操作 do 命令序列 done ### 七 for-实验:①九九乘法表 #!/bin/bash # j行数 i管列数 for j in {1..9} do for i in `seq $j` do echo -e "${i}x${j}=$[i*j] \c" done echo done ![](https://file.jishuzhan.net/article/1751003233054101505/0d475c735daeb6fe3ad202981deedc20.webp) ![](https://file.jishuzhan.net/article/1751003233054101505/54f4ac8ad34f511e72dbd39a53594017.webp) 另一种 #!/bin/bash for j in {1..9} do for i in `seq $j` do echo -ne "$j*$i=$[ $j*$i ]\t" done echo done ![](https://file.jishuzhan.net/article/1751003233054101505/636f4cbfd678bf7ac0d5016301daab5e.webp) #### 实验②测试ping 通 #!/bin/bash for i in {1..254} do { ping -c2 -W2 192.168.11.$i &>/dev/null && echo "$i is online" >> data/hostonline.txt || echo "$i is offline" >> data/hostoffline.txt } & done 另一个 [root@localhost ~]# cat mcb8.sh #!/bin/bash read -p "请输入你需要测试的网段,格式为(192.168.11.):" ip for i in {1..254} do { ping -c2 -W2 $ip$i &>/dev/null if [ $? -eq 0 ] then echo "$ip$i is online" echo $ip$i >> host.txt else echo "$ip$i is offline" fi }& done wait ![](https://file.jishuzhan.net/article/1751003233054101505/ffe423b16dc933632ed00b398a92d432.webp) ![](https://file.jishuzhan.net/article/1751003233054101505/0e4989af11b8853783ea25168e858012.webp) #### 实验③ 改变颜色 \[root@localhost data\]# echo -e "\\E\[1;$\[RANDOM%7+31\]m 称霸武林 \\E\[0" #### 实验④ 求和 #!/bin/bash sum=0 for i in {1..100} do sum=$[sum+i] done echo $sum ![](https://file.jishuzhan.net/article/1751003233054101505/465c9c2e80e23f7c8b55d92cc1b1472c.webp) 另一种方法 #!/bin/bash #by even 2018 sum=0 for i in `seq 1 100` do sum=$[$i+$sum] done echo $sum ![](https://file.jishuzhan.net/article/1751003233054101505/495937f517b47d0f6f39358498f6e1d4.webp) 另一种 #!/bin/bash # i=100 a=1 until [ $i -le 1 ];do #循环条件 i<=1 a=$(( $a + $i )) i=$(( $i - 1 )) done echo $a ![](https://file.jishuzhan.net/article/1751003233054101505/873b3e7cbfaf006dd3adfe76865648e7.webp) #### 实验⑤改名字 [root@localhost data]# cd / [root@localhost /]# mkdir data [root@localhost /]# bash mcb13.sh bash: mcb13.sh: 没有那个文件或目录 [root@localhost /]# cd [root@localhost ~]# cd data/ [root@localhost data]# mv mcb13.sh /data [root@localhost data]# cd /data/ [root@localhost data]# ls mcb13.sh [root@localhost data]# [root@localhost data]# ls mcb13.sh *************************** [root@localhost ~]# cd data/ [root@localhost data]# mv mcb13.sh /data [root@localhost data]# cd /data/ [root@localhost data]# ls mcb13.sh ********************************** [root@localhost data]# cat mcb13.sh #!/bin/bash for i in `cat /data/name.txt` do id $i if [ $? -eq 0 ];then echo "用户已存在" else useradd $i[root@localhost data]# cat name.txt 马传斌 马传斌2 马传斌3 ABCD EFGihf ************************** echo 123 | passwd --stdin $i fi done *********************** [root@localhost data]# bash mcb13.sh id: 马传斌: no such user useradd:无效的用户名"马传斌" passwd:未知的用户名 马传斌。 id: 马传斌2: no such user useradd:无效的用户名"马传斌2" passwd:未知的用户名 马传斌2。 id: 马传斌3: no such user useradd:无效的用户名"马传斌3" passwd:未知的用户名 马传斌3。 id: ABCD: no such user 更改用户 ABCD 的密码 。 passwd:所有的身份验证令牌已经成功更新。 id: EFGihf: no such user 更改用户 EFGihf 的密码 。 passwd:所有的身份验证令牌已经成功更新。

相关推荐
yangang1851 小时前
linuxbash原理
linux·运维·服务器
小小毛桃1 小时前
在Ubuntu系统中运行Windows程序
linux·windows·ubuntu
一一Null2 小时前
关于手机取证中逻辑采集与系统备份的差异
服务器·网络·智能手机
码农新猿类2 小时前
服务器本地搭建
linux·网络·c++
小度爱学习2 小时前
linux中的执行命令格式及命令帮助
linux·运维·chrome
yangshuo12812 小时前
如何在服务器上搭建mail服务器邮件服务器
运维·服务器
猿小喵2 小时前
记录一次TDSQL网关夯住故障
运维·数据库·mysql
良许Linux2 小时前
嵌入式算吃青春饭么?
linux
良许Linux2 小时前
马上要毕业去工作了,做嵌入式软件开发工程师,但是完全不会编程怎么办?
linux
良许Linux3 小时前
学stm32,有什么学习方法?
linux