shell脚本的运用

一、编写简单的脚本

shell脚本的命令工作方式有两种:交互式和批处理。

➢ 交互式(Interactive):用户每输入一条命令就立即执行。
➢ 批处理(Batch):由用户事先编写好一个完整的 Shell 脚本,Shell 会一次性执行脚本
中诸多的命令。

首先介绍一个简单的shell脚本例子(虽然很小,但所有的大的程序都是由小的模块堆积起来的,程序员一定要懂得一种脚本的书写):就使用vim编辑器把linux命令按照顺序依次放在一个文件中的功能就是一个简单的脚本了。

[root@linuxprobe ~]# vim example.sh
#!/bin/bash
#For Example BY linuxprobe.com
pwd

ls -al

linux中的文件名称可以任意,但避免人们看到的是普通文件,就在后面加上.sh后缀、

执行上面的步骤可以看到结果。

[root@linuxprobe ~]# bash example.sh
/root/Desktop
total 8
drwxr-xr-x. 2 root root 23 Jul 23 17:31 .
dr-xr-x---. 14 root root 4096 Jul 23 17:31 ..


二、可以接受用户的参数

扫描二维码关注公众号,回复: 34749 查看本文章

像上面这样的仅仅实现简单的命令控制的脚本,这不能足以体现的linux的强大之处。shell脚本早已内设用于接受用户的参数变量之间可以使用空格间隔。例如$0 对应的是当前 Shell 脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值,而$1、$2、$3……则分别对应着第 N 个位置的参数值,下图:




通过引用上面的参数看看真实的效果:

[root@linuxprobe ~]# vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第 1 个参数为$1,第 5 个为$5。"
[root@linuxprobe ~]# sh example.sh one two three four five six
当前脚本名称为 example.sh
总共有 6 个参数,分别是 one two three four five six。
第 1 个参数为 one,第 5 个为 five。


三、判断用户的参数

学习到这里,我们应该要进入新的高度,这里讲得判断用户的参数,举个例子:在前面学习到,mkdir命令是判断用户指定的文件夹名称是不是存在,如果存在就会出现报错。反之自动创建。shell脚本中的条件测试语法可以判断是否成立,若成立,返回数字0,否则返回其他随机的数。

测试语法的执行格式:(ps:条件表达式两边均有一个空格。) 测试语句格式:【 条件表达式 】

按照测试对象来划分,条件测试语句可以分为 4 种:
➢ 文件测试语句;
➢ 逻辑测试语句;
➢ 整数值比较语句;
➢ 字符串比较语句。

文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,具体的参数如表 4-3 所示:


下面使用文件测试语句来判断/etc/fstab 是否为一个目录类型的文件,然后通过 Shell 解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为 0,则目录存在;如果返回值为非零的值,则意味着目录不存在:

[root@linuxprobe ~]# [ -d /etc/fstab ]
[root@linuxprobe ~]# echo $?
1

再使用文件测试语句来判断/etc/fstab 是否为一般文件,如果返回值为 0,则代表文件存在,且为一般文件:

[root@linuxprobe ~]# [ -f /etc/fstab ]
[root@linuxprobe ~]# echo $?

0

逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。例如在 Shell
终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令,
因此可以用来判断/dev/cdrom 文件是否存在,若存在则输出 Exist 字样


[root@linuxprobe ~]# [ -e /dev/cdrom ] && echo "Exist"
Exist

猜你喜欢

转载自blog.csdn.net/qq_39486027/article/details/80004718