1、for while until三种循环的使用方法
语法:for var; do
....
done
例如:for ((i=1;i<=10;i++))
do
echo "num is $i"
done
语法:while :; do
echo looping...
done
若为 ture ,则执行 do 与 done 之间的命令,然后重新判断 while 后的 return value 。
* 若为 false ,则不再执行 do 与 done 之间的命令而结束循环
与 while 相反,until 是在 return value 为 false 时进入循环,否则结束。
* break
* continue
break 是用来打断循环,也就是"强迫结束" 循环
continue 后面也可指定一个数值 n ,以决定继续哪一层(从里向外计算)的循环,默认值为 continue 1 ,也就是继续当前的循环。
2、条件控制与流程控制
test命令用法。功能:检查文件和比较值
1)判断表达式
if test (表达式为真)
if test !表达式为假
test 表达式1 –a 表达式2 两个表达式都为真
test 表达式1 –o 表达式2 两个表达式有一个为真
2)判断字符串
test –n 字符串 字符串的长度非零
test –z 字符串 字符串的长度为零
test 字符串1=字符串2 字符串相等
test 字符串1!=字符串2 字符串不等
3)判断整数
test 整数1 –eq 整数2 整数相等
test 整数1 –ge 整数2 整数1大于等于整数2
test 整数1 –gt 整数2 整数1大于整数2
test 整数1 –le 整数2 整数1小于等于整数2
test 整数1 –lt 整数2 整数1小于整数2
test 整数1 –ne 整数2 整数1不等于整数2
4)判断文件
test File1 –ef File2 两个文件具有同样的设备号和i结点号
test File1 –nt File2 文件1比文件2 新
test File1 –ot File2 文件1比文件2 旧
test –b File 文件存在并且是块设备文件
test –c File 文件存在并且是字符设备文件
test –d File 文件存在并且是目录
test –e File 文件存在
test –f File 文件存在并且是正规文件
test –g File 文件存在并且是设置了组ID
test –G File 文件存在并且属于有效组ID
test –h File 文件存在并且是一个符号链接(同-L)
test –k File 文件存在并且设置了sticky位
test –b File 文件存在并且是块设备文件
test –L File 文件存在并且是一个符号链接(同-h)
test –o File 文件存在并且属于有效用户ID
test –p File 文件存在并且是一个命名管道
test –r File 文件存在并且可读
test –s File 文件存在并且是一个套接字
test –t FD 文件描述符是在一个终端打开的
test –u File 文件存在并且设置了它的set-user-id位
test –w File 文件存在并且可写
test –x File 文件存在并且可执行
if语法:if-then-else
if [] ;then
done..................
fi
例子:
if [-d /root/tmp]; then
echo '/root/tmp目录存在'
else
echo '/root/tmp目录不存在'
fi
if test "str" > "xyz"
echo "字符串str比较大"
else
echo "字符串str比较小"
fi
命令1 && 命令2
&&称为逻辑的AND,其运作的方式:如果“命令1”执行结果为真,才会执行“命令2”.
例如:
[ -z "$PS1" ] && return
先判断$PS1变量值是否为空,如果为空,就执行return命令,由子shell环境返回到父shell,这等于是结束执行该script.
命令1 || 命令2
运作方式为:如果“命令1”执行为假,才会执行“命令2”
case的语法格式如下:
case var in
exp-1) 命令体1 ;;
exp-2) 命令体2 ;;
...
*) 命令体 ;;
例子:
case $param in
$((a+b))) echo "NO1"
param="dog" ;;
hello) echo "NO2"
param="cat";;
10) echo "NO3"
param="pig";;
*) echo "ERROR"
esac
select 变量 in 选项1 选项2 ;do
break
done
例如:for循环里嵌套一个 select语句
#!/bin/sh
for((i=1;i < 3;i=$[$i+1])); do
echo "What is your favourite OS?"
select var in "Linux" "Cnu Hurd" "Free BSD" "Other";do
break
done
echo "You have selected $var"
done
3、数组和expr
shell 数组
BASH只支持一维数组,但参数个数没有限制。
声明一个数组:
declare -a array,或者直接赋值
数组赋值:
(1) array=(var1 var2 var3 ... varN)
(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)
(3) array[0]=var1
arrya[1]=var2
...
array[n]=varN
计算数组元素个数:
${#array[@]} 或者 ${#array[*]}
echo ${array[n]}
filename=(`ls`)
for var in ${filename[@]};do
echo $var
done
expr操作
expr命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
例子:增量计数
expr在循环中用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法意
即替代命令。最基本的一种是从(expr)命令接受输出并将之放入循环变量。
$LOOP=0
$LOOP=`expr $LOOP + 1`
使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。
$expr 30 * 3
90