**只读变量 **readonly var
**变量删除 **unset var
变量类型:
局部变量 在脚本或命令中定义,仅在当前shell实例有效
环境变量 所有程序都能访问的变量
shell变量 由shell程序特殊设置的变量
单引号: 任何字符都会原始输出
双引号 可以有变量或者转移字符
拼接变量: 直接在后面加上就行
获取字符串长度 ${#str}}
获取子串 echo ${str:1:4}
数组 数组名=(值1, 值2, … , 值n)
读取数组 $(数组名[下标])
获取数组长度 ${#array_name[*]}
多行注释
:<<EOF
注释内容
EOF
参数传递
第一个参数 $1
参数个数 $#
参数内容 $* 或
$@
参数计算
var=expr 2 + 2
关系运算符(test)
-eq 是否相等
-ne 是否不相等
-gt(-ge) 左边是否大于右边
-lt(-le) 右边是否大于左边
-o 或
-a 与
&& 逻辑与
|| 逻辑或
字符运算(test)
= 两个字符是否相等
!= 两个字符是否不等
-z 长度是否为0
-n 长度是否不为0
$ 字符是否为空
文件运算
-b 是否是块设备
-c 是否是字符设备
-d 是否是目录
-f 是否是普通文件
-r 是否刻度
-w 是否可写
-x 是否可执行
-s 是否不为空(文件大小为0)
-e 是否存在
printf
与C语言相同
**流程控制 **
if condition
then
command1
command2
...
commandN
fi
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
for (( i=0; i<5; i++));do
echo "$i"
done
for i in `seq 1 5`;do
echo "$i"
done
for i in {1..5};do
echo "three:$i"
done
for i in `ls /home/qyu`;do
echo "file$i"
done
while condition
do
command
done
until condition
do
command
done
case 值 in
模式1)
command1
command2
commandN
;;
模式2)
command1
command2
commandN
;;
esac
while read m;do
case $m in
[0-9]) echo "haha"
;;
[a-z]) echo "uu"
;;
*)
;;
esac
done
跳出循环: break命令,continue命令
函数
[ function ] funname [()]
{
action;
[return int;]
}
函数参数
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
func(){
echo "函数被调用$1"
echo "参数数量为$#"
s=0
for i in $*;
do
let s=s+i
echo "sss:"$s
done
return $s
}
func 5 2 3
echo $?
$$
Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)
$!
Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)
$?
最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$-
显示shell使用的当前选项,与set命令功能相同
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个。
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$@ 跟$*类似,但是可以当作数组用
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
command > file | 将输出重定向到 file。 |
---|---|
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
n <& m | 将输入文件 m 和 n 合并。 |
<< tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
如果希望屏蔽 stdout 和 stderr,可以这样写:
$ command > /dev/null 2>&1
read 参数
括号
() 相当于`order`
**(())**常用于算术运算比较,数值计算
[] 相当于test