【Linux】shell脚本

声明:以下内容均学习自《Linux就该这么学》一书

1、基本介绍

shell脚本第一行:#!/bin/bash,用来告诉系统使用哪一种shell解释器来执行该脚本。

执行shell脚本的方式有如下两种:

bash 复制代码
# 第一种
bash test.sh

# 第二种
./test.sh

2、接收用户的参数

shell脚本已经内设了用于接收用户输入参数的变量,变量之间可以使用空格隔开。

如:./test.sh one two three four

  • $0:对应的是当前shell脚本程序的名称,即test.sh
  • $#:对应的是总共有几个参数,此条命令总共有4个参数
  • $*:对应的是所有位置的参数值,分别是one two three four
  • $?:对应的是显示上一次命令的执行返回值
  • $1:对应的是第1个参数,即one
  • $2:对应的是第2个参数,即two

3、条件表达式

shell脚本中的条件测试语句可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其它随机数值。

如:[ cd /home/ln ] ,注意条件表达式的两边都必须要有一个空格

文件测试语句

它是使用指定条件来判断文件是否存在或权限是否满足等情况的运算符。

bash 复制代码
# 判断/home/ln是否为一个目录类型的文件

[ -d /home/ln ]
echo $? # 如果返回值是0,则目录存在;如果返回值为非零值,则目录不存在

|----|---------------|
| -d | 测试文件是否为目录类型 |
| -e | 测试文件是否存在 |
| -f | 判断是否为一般文件 |
| -r | 测试当前用户是否有权限读取 |
| -w | 测试当前用户是否有权限写入 |
| -x | 测试当前用户是否有权限执行 |
[文件测试语句的相关参数]

逻辑测试语句

用于对测试结果进行逻辑分析,根据测试结果实现不同的效果。

逻辑"与":&&。表示当前面的命令执行成功后才会执行它后面的命令。

bash 复制代码
# 先判断/home/ln是否存在,若存在则输出Exist
[ -e /home/ln ] && echo "Exist"

**逻辑"或":|| 。**表示当前面的命令执行失败后才会执行它后面的命令。

bash 复制代码
# 先判断当前登录的用户是否是root管理员身份,若是,则不执行后面的命令;若不是,则执行后面的命令。
[ $USER = root ] || echo "user"

**逻辑"非":! 。**表示把条件测试中的结果取相反值。

bash 复制代码
# 先判断当前登录用户是否是root用户,如果是,取反后,变为不是,则执行后面的语句
[ !$USER = root ] || echo "administrator"

由于当前登录的账号是root账号,那么第一个条件取反后为假,则不会执行 echo "user"语句,就会执行echo "root"语句。

bash 复制代码
# 当前登录的账号为root账号
[ !$USER = root ] && echo "user" || echo "root" #输出root

整数值比较语句

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

如:[ 10 -gt 10 ]

|---------|----------------------|
| -eq | equal,是否等于 |
| -ne | not equal,是否不等于 |
| -gt | greater than,是否大于 |
| -lt | less than,是否小于 |
| -le | less equal,是否等于小于 |
| -ge | greater equal,是否大于等于 |
[整数比较运算符]

字符串比较语句

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

bash 复制代码
# 当前语系的环境变量值LANG不是英语(en.US).
[ $LANG != "en.US" ] && echo "Not en.US" # 执行结果:Not en.US

|--------|-------------|
| = | 比较字符串内容是否相同 |
| != | 比较字符串内容是否不同 |
| -z | 判断字符串内容是否为空 |
[字符串比较运算符]

相关推荐
悄悄敲敲敲15 分钟前
Linux:基础开发工具
linux·运维·服务器
YRr YRr17 分钟前
深入理解ROS中的参数服务器及其应用
运维·服务器·ros
红茶要加冰23 分钟前
一、docker简介
运维·docker·容器
Industio_触觉智能25 分钟前
瑞芯微方案主板Linux修改系统串口波特率教程,触觉智能RK3562开发板演示
linux·开发板·串口调试·rk3562·波特率
万能菜道人31 分钟前
window下docker使用一些多媒体应用
运维·docker·容器
wxgnolux1 小时前
ssh 登入报错问题解决过程记录
运维·ssh
橘子真甜~1 小时前
Linux操作系统3-文件与IO操作1(从C语言IO操作到系统调用)
linux·运维·服务器·c语言·io·文件操作·文件fd
A charmer1 小时前
Linux 权限管理:用户分类、权限解读与常见问题剖析
linux·运维·服务器
运维自动化&云计算1 小时前
华为交换机与锐捷交换机端口链路聚合的配置
服务器·网络·华为
羊村懒哥1 小时前
linux-安全-iptables防火墙基础笔记
linux·网络·安全