Shell 脚本常用命令(二)
这种表示形式返回VALUE;否则,返回一个空串 |
${# VARIABLE} |
这种表示形式返回VARIABLE值的长度,除非VARIABLE是* 或者@在为*或者@的特殊情况下,则返回$@所表示的元素的个数。要记住,$ @保存传给该脚本的参数清单 |
${VARIABLE:?MESSAGE} |
如果VARIABLE没有值,则这种表示形式返回MESSAGE的值。Shell也显示出VARIABLE的名字,所以这种形式对捕获得错误很有用 |
注意: 使用${VALIABLE:?MESSAGE},如果发现此变量此时没有值,则脚本停止运行并显示行号和变量名称。 主要用于调试。
5、位置变量
5.1 使用$1,$2,$3…$9,${10},${11}…来代表输入的参数。其中$0代表被执行的命令或者脚本的名字。$1,$2…代表输入的第1,2…个参数
5.2 例子:
# cat count.sh#!/bin/sh
A=$1 # 将位置$1的数值读入,并赋给变量A
B=$2 # 将位置$2的数值读入,并赋给变量B
C=$[$A+$B] # 将变量A与B的值相加,将结果赋给C
echo $C # 显示C的数值
结果:
# ./count.sh 3 6
9
# ./count.sh 34 28
62
5.3 $@和$*代表参数的列表,$#代表参数的数量 (不知道$@和$*之间的差别)
6、运算符和优先级
Shell运算符和它们的优先级顺序
级别 |
运算符 |
说明 |
13 |
-, + |
单目负、单目正 |
12 |
!, ~ |
逻辑非、按位取反或补码 |
11 |
* , / , % |
乘、除、取模 |
10 |
+, - |
加、减 |
9 |
<< , >> |
按位左移、按位右移 |
8 |
< =, > =, < , > |
小于或等于、大于或等于、小于、大于 |
7 |
= = , ! = |
等于、不等于 |
6 |
& |
按位与 |
5 |
^ |
按位异或 |
4 |
| |
按位或 |
3 |
&& |
逻辑与 |
2 |
| | |
逻辑或 |
1 |
=, + =, - =, * =, /=, % =, & =, ^ =, | =, << =, >> = |
赋值、运算且赋值 |
7、source / export / let / unset
7.1 source
7.1.1 正常情况下,脚本中执行的参数设置只能影响到shell脚本本身的执行环境,不能影响到调用此shell的脚本。
7.1.2 使用source命令执行脚本,可以让脚本影响到父shell的环境(即调用此shell的当前shell)。
7.1.3 例如:source env.sh
7.2 export
7.2.1 在bash下,使用export建立环境变量后,会影响到子shell脚本和当前shell的环境变量
7.3 unset
7.3.1 删除环境变量
7.3.2 i.e.
#export newval=1
#echo $newval
1
#unset newval
#echo $newval
(ß此处为空行,newval已经被删除)
7.4 let
7.4.1 在bash中只用此命令可以建立一个临时的变量,此变量不会影响到子shell
8、逻辑判断
8.1 if
8.1.1 单格式与嵌套
if 条件表达式 ;then #当条件为真时执行以下语句
命令列表
else #为假时执行以下语句
命令列表
fi
if 语句也可以嵌套使用
if 条件表达式1;then
if 条件表达式2;then
命令列表
else
if 条件表达式3;then
命令列表
else
命令列表
fi
fi
else
命令列表
fi
8.1.2 多分支格式
if test -f "$1" ;then
lpr $1
elif test -d "$1" ;then
(cd $1;lpr $1)
else
echo "$1不是文件或目录"
fi
8.2 case
8.2.1 格式
case $newval in
1) #这里是可能值1
echo 1
;; #表示第一个分支结束
2) #这里是可能值 2
echo 2
;; #第二个分支结束
*) #表示其他可能值,必须在最后,否则他后面的语句无法执行
echo unkown
esac #case 语句结束
8.3 while /until
格式:
例如:
Sum=0
i=0
while true #true是系统的关键词 表示真
do
i=`expr $i + 1`
Sum=`expr $Sum + $i`
if [ $i = "100" ]
then
break;
fi
done
echo $i $Sum 最后这个程序显示的是 100 5050
下面将这个程序再改动一下
Sum=0
i=0
while [ $i != "100" ]
do
i=`expr $i + 1`
Sum=`expr $Sum + $i`
done
echo |