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