shell环境变量

# 简单的变量介绍
lenn@DESKTOP-AEE32JA:~$ a=10
lenn@DESKTOP-AEE32JA:~$ echo $a
10

系统变量

系统变量主要是用于参数判断和命令返回值判断,有以下系统环境变量:

编写以下脚本获得输出:

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

系统环境变量

用户环境变量

用户变量又称为局部变量,主要用在 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/bash

number=$1  # 从命令行参数获取数字

if [ $number -gt 0 ]; then
    echo "$number 是正数"
elif [ $number -lt 0 ]; then
    echo "$number 是负数"
else
    echo "$number 是零"
fi
if 常见判断逻辑运算符

数值比较运算符

其他逻辑运算符

案例:判断 code-server 进程是否再运行
#!/bin/bash
name=code-server
num=$(ps -ef | grep $name | grep -vc grep)
if [ $num -eq 1 ];then
  echo "$num running!"
else
  echo "$num is not running!"
fi
案例:判断目录是否存在
#!/bin/bash
if [! -d /opt/code-server -a ! -d /tmp/code-server];then
  mkdir -p /opt/code-server
fi
案例:按照人数判断规模
#!/bin/bash

num=$1

if [ $num -gt 500 ];then
        echo "big company!"
elif [ $num -gt 100 ];then
        echo "mid company!"
elif [ $num -gt 20 ];then
        echo "small company!"
else
        echo "unlaw num!"
fi

for 循环语句

for 变量名 in 取值列表; do
  语句 1
done
案例:检查主机状态
#!/bin/bash

network=$1
for Host in $(seq 1 254);do
        ping -c 1 $network.$Host > /dev/null && result=0 || result=1

if [ $result -eq 0 ];then
        echo -e "\033[32;1m$network.$Host is up \033[0m"
else
        echo -e "\033[;31m$network.$Host is down \033[0m"
fi

done

while 循环

while  (表达式)
do
语句1
done
break 和 continue 语句
# break 和 continue 语句
  break 是终止循环。
  continue 是跳出当前循环。
#示例 1:在死循环中,满足条件终止循环
while true; do
  let N++
  if [ $N -eq 5 ]; then
    break
fi
  echo $N
done
输出: 1 2 3 4

#示例 2:举例子说明 continue 用法
N=0
while [ $N -lt 5 ]; do
  let N++
if [ $N -eq 3 ]; then
  continue
fi
  echo $N
done

输出: 1 2 4

# 打印 1-100 数字
i=0
while ((i<=100))
do
        echo  $i
        i=`expr $i + 1`
done
案例:求 1-100 的总和
#!/bin/bash

j=0
i=1
while ((i<=100));do
        j=`expr $i + $j`
        ((i++))
done
echo $j

参考资料:https://it.0voice.com

11-16 09:10