一.shell的基本语法—变量
- 命名规则
- 以字母开头
- 使用中划线或者下划线做单词的连接
- 同类型的用数字区分
- 对于文件最好加上拓展名
- 系统变量
- set 和 env区别
- set:显示所有变量
- env:系统变量即环境变量
- 变量赋值
- unset VARNAME:删除变量
- 常用系统变量
- PATH
- PWD
- LANG
- HOME
- HISTSIZE:历史日志行数
- PS1:存放用户信息
- IFS
- export:定义全局变量
- 定义变量名的边界
[root@MiWiFi-R3-srv ~]# rest_mem=20
[root@MiWiFi-R3-srv ~]# echo ${rest_mem}%
20% - 数据类型
二. shell的基本语法—运算符
- 算术运算符
- +
- -
- *
- /
- %
- 关系操作
- <
- >
- <=
- >=
- ==
- !=
- &&
- ||
- 以上与(())连用
- test命令相关,[]可以达到一样的效果
- 赋值运算符
- =
- +=
- *=
- /=
- %=
- [root@MiWiFi-R3-srv ~]# ((x%=3))
[root@MiWiFi-R3-srv ~]# echo $x
- shell里的所有计算器
- $[]
- (())
- $(())
- expr
- 浮点运算bc软件
- yum install bc -y
- echo 'scale=2;1/3'|bc -l(保留两位,1除以3运算)
- 测试操作
- 命令执行后会返回到一个系统变量中 $?
如果$?值为0 表示命令执行成功 否则为失败 - 测试命令 test [ ] [[ ]] (( ))
- 测试文件状态
- -d 目录
- -e
- -h 链接文件
- -s 文件长度 > 0、非空
- -f 普通文件
- -w 可写
- -r 可读
- -x 可执行
- -L 符号连接
- -u 文件有 suid 位设置
- -b block文件
- 字符串测试
- = 两个字符串相等
- != 两个字符串不相等
- -z 空串
- -n 非空串
- 测试数值
- -eq 等于
- -ne 不等于
- -gt 大于
- -lt 小于
- -ge 大于等于
- -le 小于等于
- 拓展测试符号
- 测试文件状态
- 命令执行后会返回到一个系统变量中 $?
三. 流程控制
- 流程控制之if语句
#!/bin/bash var='/etc/init.d' #var='/dev/sda' if [ -d $var ] then echo "$var is directory" elif [ -b $var ] then echo "$var is block" elif [ -f $var ] then echo "$var is regular file" else echo 'unknow' fi
- 向脚本传递参数
#test.sh echo $0 echo $1 echo $2 echo $3 echo ${11} echo '$$' $$ echo '$*' $* echo '$@' $@ echo '$#' $# echo '$?' $? ''' 测试:python test.sh 1 2 3 4 5 6 7 8 9 10 11 输出结果: ./test.sh 2 11 $$ 14312 $* 1 2 3 4 5 6 7 8 9 10 11 $@ 1 2 3 4 5 6 7 8 9 10 11 $# 11 $? 0 * $0 为运行的文件名 * $$ 为进程pid * $* 为输入的所有的参数 * $@ 同$* * $# 输入参数个数 * $? 上一条命令是否执行成功 '''
- 修改脚本,使其能接收调用者传来的参数
[root@MiWiFi-R3-srv ~]# cat test_file.sh #!/bin/bash if [ -d $1 ] then echo "$1 is directory" elif [ -b $1 ] then echo "$1 is block" elif [ -f $1 ] then echo "$1 is regular file" else echo 'unknown' fi [root@MiWiFi-R3-srv ~]# ./test_file.sh /etc/passwd /etc/passwd is regular file
- 检测nginx是否启动,如果没启动,将其启动
#! /bin/bash ps aux|grep nginx|grep -v grep if [ $? -eq 1 ] then systemctl start nginx fi