10.编写Shell脚本(1)

本文详细介绍了Shell脚本的基础构成,包括脚本声明、批处理与交互式模式、脚本文件管理、运行方法、接收和判断用户参数,以及使用条件测试语句如文件测试、逻辑测试、整数和字符串比较。
摘要由CSDN通过智能技术生成

1.shell的组成

  1. 脚本声明         #!/bin/bash
  2. 脚本注释        以#开头
  3. 脚本命令        实现脚本的功能

2.分类

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

shell脚本文件,建议将.sh后缀加上, 以表示是一个脚本文件。 

3.运行脚本的方法

  1. Bash解释器命令直接运行Shell脚本文件
  2. 通过输入完整路径的方式来执行。但默认会因为权限不足而提示报错信息,此时只需要为脚 本文件增加执行权限即可

4.编写简单的脚本

查看当前所在工作路径并列出当前目录下所有的文件及属性信息

[root@localhost ~]# cat cat.sh
#!/bin/bash
#查看当前所在工作路径并列出当前目录下所有的文件及属性信息
pwd
ls -al
[root@localhost ~]#  bash cat.sh
/root
total 2097256
dr-xr-x---. 22 root root       4096 Jan 21 10:20 .
dr-xr-xr-x. 18 root root        235 Jan 20 16:34 ..
-rw-r--r--.  1 root root        312 Jan 19 18:58 111
drwxr-xr-x.  2 root root          6 Jan 19 11:41 123
drwxr-xr-x.  2 root root          6 Jan 19 11:24 2
[root@localhost ~]# ./cat.sh
-bash: ./cat.sh: Permission denied
[root@localhost ~]# chmod +x cat.sh
[root@localhost ~]# ./cat.sh
/root
total 2097256
dr-xr-x---. 22 root root       4096 Jan 21 10:20 .
dr-xr-xr-x. 18 root root        235 Jan 20 16:34 ..
-rw-r--r--.  1 root root        312 Jan 19 18:58 111
drwxr-xr-x.  2 root root          6 Jan 19 11:41 123

5.接收用户的参数

shell脚本内设了用于接收参数的变量,变量之间使用空格间隔。

$0 对应的是当前 Shell 脚本程序的名称,

$#对应的是总 共有几个参数,

$*对应的是所有位置的参数值,

$?对应的是显示上一次命令的执行返回值,

而$1、$2、$3……则分别对应着第N个位置的参数值 

[root@localhost ~]# cat example.sh
#!/bash/sbin
#接收用户的参数
echo "当前脚本的名字是:$0"
echo "总共有$#个参数,分别是$*"
echo "第一个参数为$1,第五个参数为$5"

[root@localhost ~]# bash example.sh one two three four five six
当前脚本的名字是:example.sh
总共有6个参数,分别是one two three four five six
第一个参数为one,第五个参数为five
[root@localhost ~]#

6.判断用户的参数

        Shell脚本中的条 件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回非零值。切记,条件表达式两边均应有一个空格。

 按照测试对象来划分,条件测试语句可以分为4种:

  1. 文件测试语句

-d 测试文件是否为目录类型

-e 测试文件是否存在

-f 判断是否为一般文件

-r 测试当前用户是否有权限读取

-w 测试当前用户是否有权限写入

-x 测试当前用户是否有权限执行

        使用文件测试语句来判断/etc/是否为一个目录类型的文件,  然后通过Shell解释器的内设$?变量显示上一条命令执行后的返回值。

        如果返回值为0,则目录存在;如果返回值 为非零的值,则意味着它不是目录,或这个目录不存在:

[root@localhost ~]# [ -d /etc ]
[root@localhost ~]# echo $?
127

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

[root@localhost ~]# [ -f /etc ]
[root@localhost ~]# echo $?
1

逻辑测试语句

 逻辑与

        在Shell 终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令, 因此可以用来判断/dev/cdrom文件是否存在,若存在则输出Exist字样。

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

 逻辑或

逻辑“或”,它在 Linux 系统中的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前 登录的用户是否为非管理员身份:

[trick@localhost ~]$ [ $USER = root ] || echo user
user

逻辑非

        逻辑“非”,在Linux系统中的运算符号是一个叹号(!),它表示把条件测 试中的判断结果取相反值。

!真=假

!假=真

        如果原本测试的结果是正确的,则将其变成错误的; 原本测试错误的结果,则将其变成正确的。

        现在切换回到root管理员身份,再判断当前用户是否为一个非管理员的用户。由于 判断结果因为两次否定而变成正确,因此会正常地输出预设信息:

[root@localhost ~]# echo $USER
root
[root@localhost ~]#  [ ! $USER = root ] || echo "administrator"
administrator

        当前登录用户root,先判断当前 登录用户的USER 变量名称是否等于root,

        然后用逻辑“非”运算符进行取反操作,效果就 变成了判断当前登录的用户是否为非管理员用户。

        最后若条件成立,则会根据逻辑“与”运 算符输出user字样;

        若条件不满足,则会通过逻辑“或”运算符输出root字样,而只有在前面的&&不成立时才会执行后面的||符号。

[root@localhost ~]#  [ ! $USER = root ] && echo "user" || echo "root"
root

整数值比较语句

        整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作

                                                可用的整数比较运算符        

-eq 是否等于

-ne 是否不等于

-gt 是否大于

-lt 是否小于

-le 是否等于或小于

-ge 是否大于或等于

10是否大于10以及10是否等于10

[root@localhost ~]# [ 10 -eq 10 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ 10 -gt 10 ]
[root@localhost ~]# echo $?
1

        输出系统剩余内存

        先使用free -m命令查看内存使用量情况(单位为MB),然后通过“grep Mem:”命令 过滤出剩余内存量的行,再用awk '{print $4}'命令只保留第4列。

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1966         979         376          10         610         799
Swap:          2047           0        2047
[root@localhost ~]# free -m | grep Mem | awk '{ print $4}'
376

        建议把输出结果赋值给一个变量,以方便其 他命令进行调用:

[root@localhost ~]#  FreeMem=`free -m | grep Mem: | awk '{print $4}'`
[root@localhost ~]# echo $FreeMem
362

使用整数运算符来判断内存可用量的值是否小于1024,若小 于则会提示内存不足的字样:

[root@localhost ~]#  [ $FreeMem -lt 1024 ] && echo "内存不足"
内存不足

字符串比较运算符

        用于判断测试字符串是否为空值,或两个字符串是否相同。它经常用来 判断某个变量是否未被定义(即内容为空值)

= 比较字符串内容是否相同

!= 比较字符串内容是否不同

-z 判断字符串内容是否为空

来通过判断Trick变量是否为空值,进而判断是否定义了这个变量:

[root@localhost ~]# [ -z $Trick ]
[root@localhost ~]# echo $?
0

        当用于保存当前语系的环境变量值LANG不是英语 (en.US)时,则会满足逻辑测试条件并输出“不是英语”的字样:

[root@localhost ~]# [ ! $LANG = "en.US" ] && echo "不是英语"
不是英语
[root@localhost ~]#

  • 28
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trick♂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值