shell环境变量
# 简单的变量介绍
lenn@DESKTOP-AEE32JA:~$ a=10
lenn@DESKTOP-AEE32JA:~$ echo $a
10
系统变量
系统变量主要是用于参数判断和命令返回值判断,有以下系统环境变量:
变量名 | 变量值 |
---|---|
0 | 当前脚本的名称 |
n | 当前脚本第n个参数 |
* | 当前脚本所有参数,不包括脚本本身 |
# | 当前脚本参数个数,不包括脚本本身 |
? | 命令或程序执行完后的状态,0表是成功 |
$ | 程序本省的PID号 |
编写以下脚本获得输出:
echo $0
echo $1
echo $2
echo $*
echo $#
echo $?
echo $$lenn@DESKTOP-AEE32JA:~$ ./sys.sh 123 "123"
./sys.sh
123
123
123 123
2
0
4913
系统环境变量
变量名 | 变量值 |
---|---|
PATH | 命令所示路径,以冒号分割 |
HOME | 用户家目录 |
SHELL | 当前 shell 类型 |
USER | 当前用户名 |
ID | 当前用户 id 信息 |
PWD | 当前所在路径 |
TERM | 当前终端类型 |
HOSTNAME | 主机名 |
PS1 | |
HISTSIZE | |
RANDOM | 随机生成一个0~32767 的整数 |
用户环境变量
用户变量又称为局部变量,主要用在 shell 脚本内部或者临时局部使用,比如:
A=10
BACK_DIR=/home/user/back
IPADDR=127.0.0.1
shell 流程控制
if 条件语句
if [ condition ]; then# 如果条件为真,则执行的命令
elif [ another_condition ]; then# 如果另一个条件为真,则执行的命令
else# 如果所有条件都不满足,则执行的命令
fi
举例
#!/bin/bashnumber=$1 # 从命令行参数获取数字if [ $number -gt 0 ]; thenecho "$number 是正数"
elif [ $number -lt 0 ]; thenecho "$number 是负数"
elseecho "$number 是零"
fi
if 常见判断逻辑运算符
数值比较运算符
运算符 | 全称 | 意思 |
---|---|---|
-eq | equal | 等于 |
-ng | not equal | 不等于 |
-gt | greater than | 大于 |
-lt | less than | 小于 |
-ge | greater than or equal to | 大于等于 |
-le | less than or equal to | 小于等于 |
其他逻辑运算符
运算符 | 作用 |
---|---|
-f | 判断文件是否存在 if [-f filename] |
-d | 判断目录是否存在 if [-d dir] |
-a | 双方都成立 |
-o | 单方成立 |
-z | 空字符串 |
-x | 是否具有可执行权限 |
&& | 双方都成立 |
案例:判断 code-server 进程是否再运行
#!/bin/bash
name=code-server
num=$(ps -ef | grep $name | grep -vc grep)
if [ $num -eq 1 ];thenecho "$num running!"
elseecho "$num is not running!"
fi
案例:判断目录是否存在
#!/bin/bash
if [! -d /opt/code-server -a ! -d /tmp/code-server];thenmkdir -p /opt/code-server
fi
案例:按照人数判断规模
#!/bin/bashnum=$1if [ $num -gt 500 ];thenecho "big company!"
elif [ $num -gt 100 ];thenecho "mid company!"
elif [ $num -gt 20 ];thenecho "small company!"
elseecho "unlaw num!"
fi
for 循环语句
for 变量名 in 取值列表; do语句 1
done
案例:检查主机状态
#!/bin/bashnetwork=$1
for Host in $(seq 1 254);doping -c 1 $network.$Host > /dev/null && result=0 || result=1if [ $result -eq 0 ];thenecho -e "\033[32;1m$network.$Host is up \033[0m"
elseecho -e "\033[;31m$network.$Host is down \033[0m"
fidone
while 循环
while (表达式)
do
语句1
done
break 和 continue 语句
# break 和 continue 语句break 是终止循环。continue 是跳出当前循环。
#示例 1:在死循环中,满足条件终止循环
while true; dolet N++if [ $N -eq 5 ]; thenbreak
fiecho $N
done
输出: 1 2 3 4#示例 2:举例子说明 continue 用法
N=0
while [ $N -lt 5 ]; dolet N++
if [ $N -eq 3 ]; thencontinue
fiecho $N
done输出: 1 2 4# 打印 1-100 数字
i=0
while ((i<=100))
doecho $ii=`expr $i + 1`
done
案例:求 1-100 的总和
#!/bin/bashj=0
i=1
while ((i<=100));doj=`expr $i + $j`((i++))
done
echo $j
参考资料:https://it.0voice.com