Linux笔记——控制流

列表:

Linux笔记——vim常用操作及扩展补充[手册]

Linux笔记——linux常用命令集合

Linux笔记——命令:awk

Linux笔记——命令:sed

Linux笔记——命令:grep

Linux笔记——命令:find

Linux笔记——命令:Sort,uniq,join,cut,paste,split

Linux笔记——shell基础:变量&本地变量&位置变量&特定变量参数

Linux笔记——条件测试test

Linux笔记——控制流

Linux笔记——shell补充:参数传递&函数等

Linux笔记——正则表达式入门及应用

Linux笔记——linux进程

Linux笔记——SVN命令总结

rpm&yum包管理命令总结

鉴于博客,表格&排版&颜色标记等等无法显示,大家可以下载这个笔记的资源

12个文档,不需要积分,以目录+表格+颜色标记形式

下载资源地址http://download.csdn.net/detail/wklken/3815477

The end! Thx! wklken的笔记

-----------------------------------------------

控制流

If then else语句

格式

if 条件1

then 命令1

elif 条件2

then 命令2

else

命令3

fi

if 条件 if 条件;then

then 命令 等价 命令

fi fi

示例

1. 简单的if语句

$if [ “10” –lt “12” ]

> then

> echo “10 is less than 12”

>fi

2. 直接上命令

$if grep “dave” data.file > /dev/null 2>&1

>then

> echo “Dave in”

> else

> echo “Dave not in”

>fi

3. 测试文件拷贝是否成功

$if cp myfile myfile.bak

> then

> echo “Good copy”

> else

> echo “basename:$0:could not copy”

>fi

4. 当前目录测试

$DIRECTORY=`pwd` //反引号

$if [ “$DIRECTORY” != “/” ]

>then

> echo “Not root”

>exit 1

>fi

5. 文件权限测试

$LOGFILE=test.txt

$if [ ! –w “LOGFILE” ]

>then

> echo “you cannot write to $LOGFILE” >&2

>fi

6.变量设置测试

$if [ -z $EDITOR ]

>then

> echo “Your EDITOR environment is not set”

>else

> echo “Using $EDITOR as the default editor”

>fi

7.可以多个if 嵌套,但注意层次

$if [ -d $DIR]

>then

> cd $DIR

> if [ $? = 0 ]

> then

> do something

> fi

>fi

8.多个检测值

$if [ “$ANS” = “y” ] || [ “$ANS” = “Y” ]

注意:

if [ “$myvar” == “yes” ]; then

# do something ...

fi

检查变量

当不确定变量是否存在时,加双引号通常是安全的做法。

Case语句

格式:

case variable in

pattern [| pattern] …..)

命令….

;;

模式2)

命令…..

;;

*)

…….

;;

esac

注意,每个模式行都以双分号结尾

把最精确的匹配放在最前面

示例:

1. 简单的case语句

read ANS

case $ANS in

1)

echo “1”

;;

2)

echo “2”

;;

*)

echo “not right”

exit 1

;;

esac

2. 匹配模式使用

read ANS

case $ANS in

v100|v101)

echo “1”

;;

V102)

echo “2”

;;

*)

echo “not right”

exit 1

;;

esac

3. 提示输入y/n

read ANS

case $ANS in

y|Y|yes|Yes)

echo “yes is selected”

;;

n|N)

echo “no is selected”

;;

*)

echo “`basename $0` :Unknown response”

exit 1

;;

esac

for循环

格式

for 变量名 in 列表

do

命令1

命令2

done

示例:

1. 简单的for循环

for loop in 1 2 3 4 5

do

echo $loop

done

2. 打印字符串列表

for loop in “orange red blue grey”

do

echo $loop

done

3. 打印当前命令下的所有文件

for loop in `ls`

do

echo $loop

done

4. 对for循环使用参数

脚本中,for params in “$@” 等价于 for params

for params

do

echo “You supplied $params in $@”

done

5. 多文件转换

for files in `ls LPSO*`

do

cat $files | tr “[a-z]” “[A-Z]” >$files

done

6. 循环计数

counter=0

for files in *

do

counter = `expr $counter + 1`

done

7. for循环的嵌套

for 变量1 in 列表1

do

for 变量2 in 列表2

do

命令

done

done

bash中的for循环写法

#!/bin/bash

for i in 1 2 3 4 5 6 7 8 9 10; do

# do something

done

for i in `seq 1 10`; do

# do something

done

for i in {1..10}; do

# do something

done

for ((i = 1; i <= 10; i++)); do

# do something

done

until循环

执行一系列命令直到条件为真时停止

Until循环与while循环处理方式上刚好相反

如果循环至少要执行一次,使用while,如果可能根本不需要执行,使用until

格式:

until condition

do

命令…..

done

测试发生在循环末尾,所以至少执行一次

示例:

1. 简单的until测试

IS_ROOT=`who | grep root`

until [ “$IS_ROOT” ]

do

sleep 5

done

2. 监视文件被删除

LOCK_FILE=”temp”

until [ ! –f $LOCK_FILE ]

do

sleep 1

done

echo “file deleted”

3. 监视磁盘空间

LOCK_OUT=`df | grep /logs | awk ‘{print $5}’| sed ‘s/%//g’ `

echo $LOCK_OUT

until [ “$LOCK_OUT” –gt “90” ]

do

echo “File system.Logs is nearly full”

exit

done

while循环

用于不断执行一系列命令,也用于从输入文件中读取数据

格式:

while condition

do

命令1

命令2

done

示例:

简单的while命令

COUNTER=0

while [ $COUNTER –lt 5 ]

do

COUNTER=`expr $COUNTER + 1`

echo $COUNTER

done

1. 循环读文件

while read LINE

do

echo $LINE
done < dream

2. 读文件不同字段

while read DEPT ITEMS
do

…..

done < total.txt

3. 每次读一对记录

while read rec1

do

read rec2

echo “$rec1”

echo “$rec2”

done <record.txt

4. 忽略注释行

while read LINE

do

case $LINE in

\#*) ;;

*)

echo $LINE

;;

esac

done

补充;break和continue控制循环

Break

允许跳出循环,通常在进行一些列处理后退出循环或case语句

若多重循环,可指定跳出的循环个数,如跳出两重循环 break 2

命令不执行当前循环体内break下面的语句

从当前循环退出.

在控制条件未满足之前,跳出for,while,until循环,可以为break提供一个额外参数来表明需要跳出的循环层数

默认只跳出一层循环

示例:

1. 跳出case

case $ANS in

1|2|3)

Do something

break;

;;

*)

;;

esac

continue

不会跳出循环,只是跳过此循环步

命令是程序在本循体内忽略下面的语句,从循环头开始执行.

跳到下一次循环继续执行


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值