跳转至

shell


基础

# 脚本需要什么解释器来执行
#!/bin/bash

# 表达式要用``包裹
``

# 获得前端输入 并赋值给变量
read 变量名

# 输出
printf "Hello, Shell\n"

# 检测条件是否成立
test
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi
for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

# 跳出循环
break


# 跳出当前循环
continue
# 获取参数 可以 $0 $1 $2 以此类推
$0

# 获取全部参数
$*

# 获取全部参数 以单个处理 在循环中
$@

# 传递参数的个数
$#

# 脚本运行的当前进程ID号
$$

# 后台运行的最后一个进程的ID号
$!

echo
echo Hello World !

echo 'Hello World !'  # 原样输出

echo "Hello World !"

echo `date`  # 显示命令执行结果

echo ${变量}

echo $变量

echo -e "OK! \n"  # 可以有转义符

echo "It is a test" > 文件.txt  # 将文本覆盖到文件

echo "It is a test" > 文件.txt  # 将文本追加到文件
变量
# 将变量设置为只读
readonly 变量

# 删除变量
unset 变量

# 获取变量数量
${#变量}

# 切片
${变量:1:4} 

字符串

# 变量
名称='值'  # 单引号内的变量是无效的, 会原样输出.
名称="值"  # 双引号里可以出现转义字符和变量

数组

定义
名称=(   )

名称=(
值
值
值
值
)

名称[0]=值
名称[1]=值
名称[n]=
# 读取数组
${数组[0]}

# 获取全部值
"${数组[@]}"

# 获取数组数量
${#数组[@]}${#数组[*]}

# 取得数组单个元素的长度
${#数组[0]}

算术运算符

表达式要放在``之间, 要有空格 例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。

算术运算符

a=10
b=20

val=`expr $a + $b`
关键字 描述
+
-
*
/
% 取余
= 赋值
== 相等
!= 不相等

关系运算符

假定变量 a 为 10,变量 b 为 20

关键字 描述 举例
-eq 检测两个数是否相等 [ $a -eq $b ] 返回 false
-ne 检测两个数是否不相等 [ $a -ne $b ] 返回 true
-gt 检测左边的数是否大于右边的 [ $a -gt $b ] 返回 false
-lt 检测左边的数是否小于右边的 [ $a -lt $b ] 返回 true
-ge 检测左边的数是否大于等于右边的 [ $a -ge $b ] 返回 false
-le 检测左边的数是否小于等于右边的 [ $a -le $b ] 返回 true

布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20

关键字 描述 举例
! 非运算,表达式为 true 则返回 false,否则返回 true [ ! false ] 返回 true
-o 或运算,有一个表达式为 true 则返回 true [ $a -lt 20 -o $b -gt 100 ] 返回 true
-a 与运算,两个表达式都为 true 才返回 true [ $a -lt 20 -a $b -gt 100 ] 返回 false

逻辑运算符

以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20

关键字 描述 举例
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":

关键字 描述 举例
= 检测两个字符串是否相等,相等返回 true [ $a = $b ] 返回 false
!= 检测两个字符串是否不相等,不相等返回 true [ $a != $b ] 返回 true
-z 检测字符串长度是否为0,为0返回 true [ -z $a ] 返回 false
-n 检测字符串长度是否不为 0,不为 0 返回 true [ -n "$a" ] 返回 true
$ 检测字符串是否不为空,不为空返回 true [ $a ] 返回 true

文件测试运算符

关键字 描述 举例
-d 检测文件是否是目录,如果是,则返回 true [ -d $file ] 返回 false
-f 检测文件是否是普通文件(既不是目录,也不是设备文件) [ -f $file ] 返回 true
-r 检测文件是否可读 [ -r $file ] 返回 true
-w 检测文件是否可执行 [ -x $file ] 返回 true
-s 检测文件是否为空(文件大小是否大于0),不为空返回 true [ -s $file ] 返回 true
-e 检测文件(包括目录)是否存在 [ -e $file ] 返回 true

函数

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73