Shell编程(2)

2025 年 4 月 6 日 星期日(已编辑)
3
AI 生成的摘要
此内容由 AI 生成
这篇文章上次修改于 2025 年 4 月 6 日 星期日,可能部分内容已经不适用,如有疑问可询问作者。

Shell编程(2)

Shell编程(2)

1. 运算符

1.1 赋值运算符

  • =
  • 用于算术赋值和字符串赋值
  • 测试操作符
  • 使用unset取消变量

1.2 算术运算符

  • +,++

  • -,--

  • *

  • /

  • **(乘方)

  • %(求余)

  • 使用expr进行运算

    • 只能支持整数
    • expr 是一条命令
    • 书写格式苛刻,不常用
    expr 4 + 5 # 运算符左右需要空格
    
    num1=`expr 4 + 5`
    echo $num1
    
    name=zhangsan
    len=`expr length $name`
    echo $len
    

1.3 双圆括号

  • 是let命令的简写

  • 注意做赋值和输出时需要在外面加$

  • 最常用

    ((a=10))
    ((a++))
    echo $((10+20))
    
    ((a=4+5))
    echo $a
    # 如果是下面写法呢
    b=4+5
    echo $b
    

1.4 比较运算符

  • <, > , =
  • <= , >= , !=
  • 0 True
  • 非零 False
((5>4))
echo $?
# 真为0值

((5<4))
echo $?
# 假为非0值

1.5 逻辑运算符

  • && || !
(( 5>4 && 6>5 ))
echo $?

2. 测试和判断

2.1 test

  • 用于检查文件或者比较值
  • test可以做以下测试
    • 文件测试
    • 整数比较测试
    • 字符串测试
  • 可以简化为[]
  • []还有扩展写法为[[]],支持&&,||,<,>

  • 至少要有一个空格

# 是否存在且是文件
test -f /etc/passwd
# 等价 [ -f /etc/passwd ]

# 是否存在且是目录
test -d /etc
# 等价 [ -d /etc ]

# 是否存在
test -e /etc
# 等价 [ test -e /etc ]

# 字符串长度是否为0(为0则表达式成立)
test -z hello
# 等价 [ test -z hello ]

# 判断数字
[ 5 -gt 4 ]
# 等价 [[ 5 > 4 ]]
# -gt >
# -lt <
# -eq =
# -ge >=
# -le <=

# 判断字符串
[ "abc" = "abc" ]
# 区分大小写
[ "abc" = "Abc" ]

2.2 if条件语句

  • 基本语法
if [ 测试条件成立 ] 或者使用命令返回0值
then
  执行命令
fi
  • 案例
if [ $UID = 0 ]
then
  echo "you are root"
fi

if pwd
then
  echo "pwd is running"
fi

2.3 if-then-else语句

  • 基本语法
if [ 测试条件成立 ]
then
  执行命令
else
  执行条件不成功的命令
fi
  • 案例
#!/bin/bash

# if-else的使用
if [ $USER = root ] ;then
  echo "you are root"
  echo $UID
else
  echo "you are other"
  echo $UID
fi

2.4 if-elif-else语句

  • 基本语法
if [ 测试条件成立 ]
then
  执行命令
elif [ 测试条件成立 ]
then
  执行命令
else
  执行命令
fi
  • 案例
#!/bin/bash

# if-elif-else的使用
if [ $USER = root ] ; then
  echo "you are root"
elif [ $USER = chendong ] ; then
  echo "you are chendong"
else
  echo "you are other"
fi

2.5 if嵌套

  • 案例
#!/bin/bash

if [ $UID = 0 ] ;then
  echo "please run"
  if [ -x /root/shell/5.sh ] ;then
    bash /root/shell/5.sh
  fi
else
  echo "switch root user"
fi

2.6 case分支

  • 基本语法
case "$变量" in
  "情况1")
    执行命令  ;;
  "情况2")
    执行命令  ;;
  *)
    执行命令  ;;
esac
  • 案例

./start_service.sh abc

#!/bin/bash

# 注意:判断条件中的字符串一定要使用双引号
case "$1" in
  "start"|"START")
    echo "start application"  
    echo "applicaion is running" 
    ;;
  "stop"|"STOP")
    echo "stop application"  
    echo "applicaion is stopped" 
    ;;
  *)
    echo "unknow option"
    echo "Usage: $0 {start|stop}"  
    ;;
esac
  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...