您的位置:首页 > 运维架构 > Shell

ubuntu之shell编程学习笔记3——编程的基本元素

2011-10-26 16:59 369 查看
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 ...
=varN)

(3) array[0]=var1

arrya[1]=var2

...

array
=varN

计算数组元素个数:

${#array[@]} 或者 ${#array[*]}

引用数组:

echo ${array
}

遍历数组:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: