判断
-
利用test命令的测试功能
test -e /opt && echo "1" || echo "2"
-
常见的测试参数
测试参数 含义 语句 -e 文件名是否存在 test -e filename -f 文件名是否存在且为文件 test -f filename -d 文件名是否存在且为目录 test -d filename -r 检测文件名是否存在且具备可读权限 test -r filename -s 检测文件名是否存在且为非空文件 test -s filename -nt/-ot 判断file1是否比file2新/旧 test file1 -nt/-ot file2 -eq 两数值相等 test n1 -eq n2 -ne 两数不相等 test n1 -ne n2 -gt n1大于n2 test n1 -gt n2 -lt n1小于n2 test n1 -lt n2 -ge n1大于等于n2 test n1 -ge n2 -le n1小于等于n2 test n1 -le n2 -
判断符号[]
- 中括号使用规则
[ "$HOME" == "$MALL" ]
[ 2 -gt 1 ]; echo $?
- 中括号内每个组件都需要有空格来分隔
- 中括号内的变量,建议以双引号括起来
- 中括号内的常数,建议以单引号或双引号括起来
- 中括号使用规则
-
shell脚本的默认变量
/etc/init.d/network restart
-
脚本已经针对参数设置变量名称
/path/to/scriptname opt1 opt2 opt3 $0(脚本文件名) $1 $2 $3 名称 解释 $# 代表后接参数的个数 $@ 代表"$1" “$2” “$3” 每个变量都是独立的 $* 代表"$1c$2c$3c$4" c为分隔字符 默认为空格 -
实例
# 执行可以携带参数的脚本,执行脚本后屏幕显示以下数据 1.程序的文件名 2.参数的个数 3.如果参数的个数小于2,告诉用户参数数量太少 4.全部的参数内容是什么 5.第一个参数是什么 6.第二个参数是什么
#!/bin/bash # Program: # Program shows the script name, parameters... # History: # 2021/5/10 Mac First release echo "The script name is ==>${0}" echo "Total parameter number is ==> $#" [ "$#" -lt 2 ] && echo "The number of parameter is less than 2. Stop here." && exit 0 echo "Your whole parameter is ==> '$@'" echo "The first parameter is ==> ${1}" echo "The second parameter is ==> ${2}"
-
-
if - else 条件判断式
-
单层简单判断、多重复杂判断
if [ 条件判断式 ];then 条件成立时执行语句; fi
if [ 条件判断式 ];then 条件成立时执行的命令; else 条件不成立时执行的命令; fi
if [ 条件判断式1 ];then 条件1成立时执行的命令; elif [ 条件判断式2 ];then 条件2成立时执行的命令; else 条件1、条件2都不成立时执行的命令 fi
案例
携带一个参数进入脚本,如果参数是hello显示Hello,how are you? 如果没有输入参数提示用户必须输入参数;如果输入的不是hello,提示用户只能输入hello作为参数
#!/bin/bash # Program: # take a parameter with the script named 'hello',or... # History: # 2021/5/10 Mac First release if [ "${1}" == "hello" ]; then echo "Hello,how are you?" elif [ "${1}" == "" ]; then echo "You must input parameter, like> {${0} somword}" else echo "The only parameter is 'hello', ex> {${0} hello}" fi
-
-
case - esac 判断
代码模板
case $变量名称 in "第一个变量内容") 程序段 ;; "第二个变量内容") 程序段 ;; *) 不包含第一个和第二个变量内容的其他程序段 exit 1 ;; esac