学习前导:
shell终端解释器就如一层包裹在系统的外壳,它充当着人机之间的解释器,负责将人们输入的命令翻译成系统可以“听懂”的语言。shell终端解释器不仅可以支持各种变量及参数,还可以利用循环、分支等逻辑进行编辑。
学习目标:
- 学会编写shell脚本
- 理解并学会使用流程控制语句,并编写脚本(以下实验输出中将会用“if条件测试语句”和“for条件循环语句”给大家举例子)。
语句类型 | 作用 |
if条件测试语句 | 可以让脚本根据实际情况执行相应的命令 |
for条件循环语句 | 逐一对信息进行处理 |
while条件循环语句 | 让脚本根据某些条件来重复执行命令的语句 |
case条件测试语句 | 在多个范围内匹配数据 |
实验输出:
实验一:
通过查看SHELL变量可以发现,当前系统已经默认使用bash作为终端解释器了。
[root@red ~]# echo $SHELL
/bin/bash
实验二:
编写一个当前系统已经创建了哪些账户的脚本。
在account.sh脚本中可以看到三个要素:
第一行:使用 #!做脚本声明,用来告诉系统使用那种shell解释器来执行脚本。
第二行:# 符号后的信息是对该脚本做出说明及解释。
第三行及以后:写入我们要执行的命令。
[root@red ~]# vim account.sh
#!/bin/bash
#search how many accounts that you had created
cat /etc/passwd
[root@red ~]# ./account.sh
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
···
···
···
实验三:编写脚本可以接收用户输入的参数,利用用于接收参数的变量($0 对应的是当前 Shell 脚本程序的名称, $#对应的是总共有几个参数, $*对应的是所有位置的参数值, $?对应的是显示上一次命令的执行返回值,而$1、 $2、 $3……则分别对应着第 N 个位置的参数值)
[root@red ~]# vim account.sh
#!/bin/bash
echo "当前脚本名称是$0"
echo "当前一共有$#个参数,分别是$*"
echo "第一个参数是$1,第二个参数是$2"
[root@red ~]# bash accept.sh 1 2 3 4 5 6
当前脚本名称是accept.sh
当前一共有6个参数,分别是1 2 3 4 5 6
第一个参数是1,第二个参数是2
实验四:Shell 脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回非零值。条件测试语法的执行格式如图 4-16 所示。切记,条件表达式两边均应有一个空格------格式:【 条件表达式 】
运算符 | 作用 |
-d | 判断文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否有读权限 |
-w | 测试当前用户是否有写权限 |
-x | 测试当前用户是否有执行权限 |
[root@red ~]# [ -d /etc/fstab ]
[root@red ~]# echo $?
1
[root@red ~]# [ -f /etc/fstab ]
[root@red ~]# echo $?
0
实验五: 使用单分支的if条件测试语句判断/media/cdrom目录是否存在,若不存在就创建这个目录。
step1:首先这里我们可以先查看是否有这个目录,可以看到目前还没有创建这个目录
[root@red ~]# ls -ld /media/cdrom
ls: cannot access '/media/cdrom': No such file or directory
step2:编写并执行shell脚本mkcdrom.sh,编写的时候请注意格式。三元素:if 【】、then、fi。
[root@red ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -d $DIR ]
then
mkdir -p $DIR
fi
[root@red ~]# bash mkcdrom.sh
step3: 检查是否已经创建了/media/cdrom目录。可以看到已创建了此目录。
[root@red ~]# ls -ldh /media/cdrom
drwxr-xr-x. 2 root root 6 May 10 20:09 /media/cdrom
实验六:创建一个主机列表,并使用for循环语句逐个测试这些主机是否在线。
step1: 创建主机列表 ipadd.txt。
[root@node1 ~]# vim ipadd.txt
172.25.0.101
172.25.0.102
172.25.0.103
172.25.0.104
172.25.0.10
step2:编写脚本文件 checkip.sh。
[root@node1 ~]# vim checkip.sh
#!/bin/bash
HLIST=$(cat ~/ipadd.txt)
for IP in $HLIST
do
ping -c 3 $IP &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $IP is online"
else
echo "Host $IP is offline"
fi
done
step3:运行脚本文件,可以看到那些主机在线,哪些不在线。
[root@node1 ~]# bash checkip.sh
Host 172.25.0.101 is online
Host 172.25.0.102 is online
Host 172.25.0.103 is online
Host 172.25.0.104 is online
Host 172.25.0.105 is offline
学习小结:
本次内容主要是讲述了怎么用vim编辑器编写shell脚本,这对我们在日常运维甚至使用在linux编程中都是大有裨益的,我个人认为可以提高自己的逻辑能力以及对该系统的使用有一定的提升。因此希望大家也可以尝试一下。