1.数值运算
表达式中,数字和运算符之间要有空格,出现在语句中要加反引号
a=11 b=22
(1) 加:dd=$(exper $a + $b)运算符两边必须有空格
Let c=$a+$b
c=$[$a+$b]
c=$(($a+$b))
c=`expr $a + $b`
乘:expr 1 \* 3
例:echo `expr 1 + 3`
(2) 两种运行方式的不同
1> sh hello.sh 不会获取脚本中的变量
2> source hello.sh会获得脚本中的变量
2.条件判断命令 test
真返回0,假返回1
(1) 整数,比较运算符
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于
例:test 1 –lt 4 判断1<4
echo $? 判断上条语句的执行结果
等价形式 [ 1 –lt 4 ]
(2) 文件测试
-e 文件存在为真
-f 存在且是普通文件
-d 存在且是目录
-s 存在且字节数大于零
-r 存在且可读
-w 存在且可写
-x 存在且可执行
例:判断mydoc是否有目录
test –d “mydoc”
(3) 字符串测试
test s 字符串s非空
test s1 = s2 判断s1=s2(等号两边加空格)
test s1 != s2 判断s1不等于s2
test –z s 判断s的长度为0,即空串
test –n s 判断s长度>0
(4) 其他参数
-a 逻辑与
-o 逻辑或
! 逻辑非
3. 控制流程
(1)if 语句,if [判断];then (写在一行) if与判断之间一定有空格
例: if [ $# -eq 0 ]
then
echo “输入了0个参数”
then echo “输入了多个参数”
else echo “输入了1个参数”
fi
(3)case语句
每个分支条件后必须以两个分号结尾
case $变量名称 in
“第一个变量内容”) 程序段;;
“第二个变量内容) 程序段;;
*) exit 1;; (*表示其他值)
esac
例:case “$#”in
0) echo “输入了0个参数”;;
1) echo “输入了1个参数”;;
*)echo “输入了多个参数”;;
esac
(4)循环结构
1>for i in {1..9}大括号中不能有变量
for i in `seq 1 9` (seq命令:产生1-9的数字序列)
do
echo `expr $i \* 10` (或echo $(expr $i \* 10))
done
2> while 语句
while [判断]
do
程序段
done
until [判断]
do
程序段
done
例:求1到100的和
i=1
sum=0
while [ $i –le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done (表示结束)
echo $sum
break和continue可以接受参数
break 2 表示跳出两层循环
3> forvar in con1 con2 con3 …
do
程序段
done
for((初始值;限制值;运行步阶))
do
程序段
done
4.函数的定义
1> 定义格式:
函数名 (){
命令1
. . .
}
2>所有函数在使用前必须定义,放在脚本的开始部分
3>调用时仅使用函数名即可
4>参数可以传递给函数
fname arg1 arg2
fname()
{
echo $1,$2; 访问参数1和参数2
echo “$@”; 以列表的方式一次性打印所有参数
echo “$*”; 类似于$@,参数被作为单个实体
return 0;
}
5> -p:指定读取值时的提示符;
read–p“please intput a num:”num
可以从键盘上读取多个变量的值,用户输入数据时,以空格或者Tab键作为分隔。
如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;
如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。
5.数组
(1) 数组定义
array_var=(1 2 3 4 5 6) (索引从0开始)
索引-值方式:
array_var[0]=”test1”
array_var[1]=”test2”
array_var[2]=”test3”
array_var[3]=”test4”
(2) 打印出特定索引值的数组元素内容
echo${array_var[$index]}
(3)以清单的形式打印出所有值
echo ${array_var[*]}
或 echo ${array_var[@]}
(4)打印数组长度
echo ${#array_var[*]}
6.关联数组
可以用任何字符作为下标,使用前用declare –Aarray进行声明
${!array[*]} 取关联数组所有键
${!array[@]}取关联数组所有键
${array[*]}取关联数组所有值
${array[@]} 取关联数组所有值
${#array[*]}关联数组的长度
${#array[@]}关联数组的长度