编程的基本元素

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语句结构:
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

posted on 2012-05-08 17:21  生活费  阅读(496)  评论(0编辑  收藏  举报

导航