Shell脚本
Shell脚本
可以将 Shell 终端解释器当作人与计算机硬件之间的“翻译官”,它作为用户与 Linux 系统内部的通信媒介,除了能够支持各种变量与参数外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。
Shell 脚本命令的工作方式有两种:交互式和批处理。
- 交互式(Interactive):用户每输入一条命令就会立刻执行。
- 批处理(Bash):由用户事先编写好一个完整的 Shell 脚本,Shell 会一次性执行脚本中诸多的命令。
在 Shell 脚本中不仅会用到前面学习过的很多 Linux 命令以及正则表达式、管道符、数据流重定向等语法规则,还需要把内部功能模块化后通过逻辑语句进行处理,最终形成日常所见的 Shell 脚本。
查看 SHELL 变量可以发现当前系统已经默认使用 Bash 作为命令行终端解释器了:
[root@bogon ~]# echo $SHELL
/bin/bash
[root@bogon ~]#
快速入门
如果想查看当前所在工作路径并列出当前目录下所有的文件及属性信息
shell脚本文件的名称可以任意,但为了避免被误认为是普通文件,所以一般情况下我们会将.sh后缀加上,以表示是一个脚本文件。
上述example.sh文件中第一行是脚本说明,标识符!#,用来告诉系统使用哪种shell解释器来执行该脚本。第二行的注释信息#,是对脚本功能和某些命令的介绍信息。第三、四行则是可执行语句。
shell脚本执行方法有两种,第一种是用bash解释命令执行运行,格式:bash 脚本文件名称;第二种是通过相对或绝对路径的方式运行,格式:路径/脚本名称。
注意:第二种但默认会因为权限不足而提示报错信息,此时只需要为脚本文件增加执行权限即可。
接收用户参数
shell脚本可接收参数的变量,变量直接使用空格间隔。
$0表示当前shell脚本程序的名称
$#表示总共有几个参数
$*表示所有位置的参数值
$?显示上一次命令的执行返回值
$1、$2、$3、$4、...,表示分别对应着第N个位置的参数值
判断用户的参数
系统在执行mkdir命令时,会判断用户指定的文件夹名称是否存在,如果存在则会报错,反之则会自动创建。
shell脚本种的条件测试语句也可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值。
测试语句格式:
[ 条件表达式 ]
注意:两边均有一个空格
如果按照测试对象来划分,条件测试语句可以分为四种:
- 文件测试语句
- 逻辑测试语句
- 整数值比较语句
- 字符串比较语句
文件测试语句
使用指定条件判断文件是否存在或者权限是否满足等情况的运算符
运算符 | 作用 |
---|---|
-d | 测试文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
逻辑测试语句
逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。
逻辑运算符 | 作用 | ||
---|---|---|---|
&& | 逻辑与 | ||
\ | \ | 逻辑或 | |
! | 逻辑非 |
整数值比较语句
整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,而且不能想当然地使用日常生活中的等号、大于号、小于号等来判断。因为等号与赋值命令符冲突,大于号和小于号分别与输出重定向命令符和输入重定向命令符冲突。因此一定要使用规范的整数比较运算符来进行操作。
运算符 | 作用 |
---|---|
-eq | 是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否等于或小于 |
-ge | 是否大于或等于 |
字符串比较语句
字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。它经常用来判断某个变量是否未被定义(即内容为空值)。
运算符 | 作用 |
---|---|
= | 比较字符串内容是否相同 |
!= | 比较字符串内容是否不同 |
-z | 判断字符串内容是否为空 |
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论