shell脚本——循环语句(附有简单例题)

目录

一.echo

二.date

1.常见选项

2.查看日历

三.for循环语句

1.for循环语句(遍历)

 for循环的三种格式

2.奇偶数

1.奇数和

2.偶数和

3.求磁盘总容量

4.批量生成用户

1.法一

2.法二

5.根据IP地址检查主机状态

1.检查具体的主机状态

2.检查一个网段的主机状态

6.九九乘法表 

倒序九九乘法表 

 7.批量改后缀

四.while

1.批量创建用户并添加密码

2.求和

3. 猜商品价格

五.until

六.菜单


一.echo

转义符号 含义
-n 不要追加换行
-e 启用下列反斜杠转义的解释
-E 显式地抑制对于反斜杠转义的解释
\b 转义后相当于按退格键,但前提是\b后面存在字符:\b表示删除前一个字符,\b\b 表示删除前两个字符   \b的个数不能超过后面的字符数
\c 不换行输出,当\c后面存在字符时,后面的字符不会被输出
\n 换行,被输出的字符从\n除开始另起一行
\f 或\v 换行,但是换行后的新行的开头位置连接着上一行的行尾
\t 转以后表示插入tab,即横向制表符
\r

光标移至行首,用后面的字符覆盖等长度的前面的字符

\\ 表示插入"\"本身

二.date

date查看当前系统时间

1.常见选项

date [选项]+[格式]

date [选项]+[MMDDhhmm[CC]YY[.ss]]

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

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

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

-d, --d=STRING  显示的是有string所指定是时间,不是当前的系统时间
 
-f ,--file=DATEFILE  显示DATEFILE每一行所指定的时间
 
-r,--reference=file  显示FILE的最后修改时间
 
-R,--rfc-822根据RFC-822指定格式输出时间
 
-s,--set=STRING根据STRING设置时间
 
--help  显示帮助文本被退出
 
--version 显示版本信息并退出
 
接下来是后缀的一些详细介绍
 
%%  文本的 %
 
%a   当前区域的星期几的简写 (Sun..Sat)
 
%A   当前区域的星期几的全称 (不同长度) (Sunday..Saturday)
 
%b    当前区域的月份的简写 (Jan..Dec)
 
%B   当前区域的月份的全称(变长) (January..December)
 
%c   当前区域的日期和时间 (Sat Nov 04 12:02:33 EST 1989)
 
%d   (月份中的)几号(用两位表示) (01..31)
 
%D   日期(按照 月/日期/年 格式显示) (mm/dd/yy)
 
%e   (月份中的)几号(去零表示) ( 1..31)
 
%h   同 %b
 
%H   小时(按 24 小时制显示,用两位表示) (00..23)
 
%I   小时(按 12 小时制显示,用两位表示) (01..12)
 
%j   (一年中的)第几天(用三位表示) (001..366)
 
%k   小时(按 24 小时制显示,去零显示) ( 0..23)
 
%l    小时(按 12 小时制显示,去零表示) ( 1..12)
 
%m  月份(用两位表示) (01..12)
 
%M   分钟数(用两位表示) (00..59)
 
%n   换行
 
%p   当前时间是上午 AM 还是下午 PM
 
%r   时间,按 12 小时制显示 (hh:mm:ss [A/P]M)
 
%s   从 1970年1月1日0点0分0秒到现在历经的秒数 (GNU扩充)
 
%S  秒数(用两位表示)(00..60)
 
%t  水平方向的 tab 制表符
 
%T  时间,按 24 小时制显示(hh:mm:ss)
 
%U  (一年中的)第几个星期,以星期天作为一周的开始(用两位表示) (00..53)
 
%V  (一年中的)第几个星期,以星期一作为一周的开始(用两位表示) (01..52)
 
%w  用数字表示星期几 (0..6); 0 代表星期天
 
%W  (一年中的)第几个星期,以星期一作为一周的开始(用两位表示) (00..53)  
 
%x  按照 (mm/dd/yy) 格式显示当前日期
 
%X  按照 (%H:%M:%S) 格式显示当前时间
 
%y  年的后两位数字 (00..99)
 
%Y  年(用 4 位表示) (1970...)
 
%z  按照 RFC-822 中指定的数字时区显示(如, -0500) (为非标准扩充)
 
%Z  时区(例如, EDT (美国东部时区)), 如果不能决定是哪个时区则为空

2.查看日历

 

三.for循环语句

读取不同的变量值,用来逐个执行同一组命令

for 变量名 in 取值列表

do  

命令序列

done

1.for循环语句(遍历)

[root@localhost ~]# vim qiuhe_for.sh 

 for循环的三种格式

格式1:

#!/bin/bash
sum=0
for i in {1..100}
do
sum=$[sum+i]
done
echo "1-100的和为:$sum"

格式2:
#!/bin/bash
sum=0
for i in `seq 10`
do
sum=$[sum+i]
done
echo "1-100的和为:$sum"

格式3:
#!/bin/bash
sum=0
for ((i=0;i<=100;i++))
do
sum=$[sum+i]
done
echo "1-100的和为:$sum"

2.奇偶数

1.奇数和

2.偶数和

3.求磁盘总容量

 

4.批量生成用户

1.法一

2.法二

[root@localhost ~]# vim useradd_for.txt  

[root@localhost ~]# vim useradd_for.sh

5.根据IP地址检查主机状态

1.检查具体的主机状态

[root@localhost ~]# vim ping_for.txt

[root@localhost ~]# vim ping_for.sh

2.检查一个网段的主机状态

[root@localhost ~]# vim ping_for.sh

 

 

6.九九乘法表 

正序九九乘法表

[root@localhost ~]# vim 99_for.sh 

倒序九九乘法表 

[root@localhost ~]# vim 99_for.sh 

 7.批量改后缀

[root@localhost mnt]# vim rename_for.sh 

四.while

重复测试某个条件,只要条件成立则反复执行

while 条件测试操作

do    

命令序列

done

1.批量创建用户并添加密码

[root@localhost ~]# vim useradd_while.sh

 

2.求和

[root@localhost ~]# vim qiuhe_while.sh

3. 猜商品价格

[root@localhost mnt]# vim caijiage_while.sh

五.until

重复测试某个条件,只要条件不成立则反复执行

until 条件测试操作

do    

命令序列

done

 [root@localhost ~]# vim qiuhe_until.sh

六.菜单

基本格式

PS3="请输入基本配置信息:" 
menu=" ”
select menu in $menu 
do
case $REPLY in 
1)

...

esac
done

[root@localhost ~]# vim menu.sh

[root@localhost ~]# vim menu.sh 
#!/bin/bash
PS3="请输入基本配置信息:"
menu="
永久关闭防火墙
关闭selinux
创建本地yum
硬盘分区
改主机名
结束
"
select menu in $menu
do
case $REPLY in
1)
systemctl disable firewalld.service
;;
2)
setenforce 0
;;
3)
cd /etc/yum.repos.d
mkdir bak
mv *.repo bak
echo "[centos7]
name=abc.repo
baseurl=file:///mnt
gpgcheck=0
enabled=1" >abc.repo
mount /dev/sr0 /mnt
yum clean all
yum repolist
;;
4)
echo "- - -" >/sys/class/scsi_host/host0/scan
echo "- - -" >/sys/class/scsi_host/host1/scan
echo "- - -" >/sys/class/scsi_host/host2/scan
lsblk
fdisk /dev/sdb <<EOF
n 
p
1
2048
+10G
w
EOF
mkfs.xfs /dev/sdb1
echo "/dev/sdb1 /mnt xfs defaults 0 0" >>/etc/fstab
mount -a
df -hT
;;
5)
hostnamectl set-hostname ooo
su
;;
6)
echo "结束"
break
esac
done

猜你喜欢

转载自blog.csdn.net/oyyy3/article/details/120886482
今日推荐