1、系统变量
$HOME、$PWD、$SHELL、$USER等
2、用户自定义变量
可以通过set命令查看环境变量列表,包括系统变量和用户自定义变量
3、定义变量
格式:变量=值
等号两侧不能有空格,变量名称一般习惯为大写(非必须),单引号和双引号有区别,双引号仅将空格脱意(空格往往表示命令的结束),单引号会将所有的特殊字符脱意
4、撤销变量
unset A
但是readonly B=2声明的静态变量B不能修改且不能unset
5、全局变量
export 变量名
把变量提升为全局环境变量,供其他shell程序使用
6、将命令的返回值赋给变量
A=`ls -la`反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la)等价于反引号
二、shell中的特殊变量
1、$? 表示上一条命令退出的状态(返回值,非输出值)
2、$$ 表示当前进程编号
3、$0 表示当前脚本名称
4、$n 表示n位置的输入参数(n代表数字,n>=1)
5、$# 表示参数的个数,常用于循环
6、$*和$@都表示参数列表
$*和$@都表示传递给函数或脚本的所有参数,不被双引号""包含时,都以$1 $2 ...$n的形式输出所有参数,当它们被双引号""包含时,"$*"会将所有的参数作为一个整体,以"$1$2...$n"的形式输出参数;"$@"会将各个参数分开,以"$1""$2"..."$n"的形式输出所有参数
三、运算符
1、格式:expr m+n或$((m+n))
2、计算(2+3)*4
第一种方法,分步计算:
S=`expr 2 + 3`(注意空格)
expr $S \* 4
第二种方法,一步完成计算:
expr `expr 2 + 3` \* 4
echo `expr \`expr 2 + 3\` \* 4`或
$(((2+3)*4))
四、for循环
1、第一种
for N in 1 2 3
do echo $N
done或
for N in 1 2 3; do echo $N; done或
for N in {1..3}; do echo $N; done
2、第二种
for ((i=0; i<= 5; i++))
do
echo "welcome $i times"
done或
for ((i=0; i<=5; i++)); do echo "welcome $i times"; done
五、while循环
1、第一种
while expression
do
command
...
done
2、第二种
i=1
while((i<=3))
do
echo $i
let i++
done
六、case语句
格式:
case $1 in
start)
echo "starting"
;;
stop)
echo "stoping"
;;
*)
echo "Usage: {start|stop}"
esac
六、read命令
从终端交互式获取输入参数
read -p(提示语句) -n(字符个数) -t(等待时间)
例子:read -p "please enter a number: " n (n用来存储输入值)
七、if判断
if condition
then
statements
elif condition
then statements
else
statements
fi
八、判断语句
[ condition ](注意condition前后要有空格) 非空返回true,可使用$?验证(0为true,>1为false),空[]返回false
[ condition ] && echo OK || echo notok 条件满足,执行前面的语句,否则执行后面的语句。if和[之间也要有空格。
九、常用判断条件
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
十、文件判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
-f 文件存在并且是一个常规的文件
-s 文件存在且不为空
-d 文件存在并是一个目录
-b 文件存在并且是一个块设备
-L 文件存在并且是一个链接
十一、自定义函数
[function] funname[()]
{
action;
[return int;]
}
注意:必须在调用函数之前,先定义函数,函数的返回值只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
脚本调试:
sh -vx xxx.sh(会把脚本执行过程的每一步的状态展示出来)
或者在脚本中增加set -x