【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 | 判断字符串内容是否为空 |
[字符串比较运算符]

相关推荐
ALex_zry3 小时前
SSH主机密钥验证失败:全面解决方案与技术手册
运维·ssh
厦门辰迈智慧科技有限公司4 小时前
城市排水管网流量监测系统解决方案
运维·服务器
我没有开挂4 小时前
旧 docker 版本通过 nvkind 搭建虚拟多节点 gpu 集群的坑
运维·docker·容器
qq_339282234 小时前
centos中libc.so.6No such file的解决方式
linux·运维·centos
leoufung4 小时前
ECPF 简介
linux·网络·kernel
小鸡,啄米5 小时前
centos9安装docker 配置docker代理
运维·docker·容器
水银嘻嘻5 小时前
12 web 自动化之基于关键字+数据驱动-反射自动化框架搭建
运维·前端·自动化
在肯德基吃麻辣烫5 小时前
Netdata在Ubuntu环境下的安装与配置:构建实时系统监控与性能分析平台
linux·运维·ubuntu
国际云,接待6 小时前
云服务器的运用自如
服务器·架构·云计算·腾讯云·量子计算
不念霉运6 小时前
Gitee DevOps:中国企业数字化转型的“本土化加速器“
运维·gitee·团队开发·代码规范·devops·代码复审