LinuxShell笔记3 条件控制和流程控制

条件控制

if/else控制

if/else语句和C语言的基本类似, 一般使用方法是:

if condition 
then
	statements
[elif condition 
then 
statements ...]
[else 
statements]
if

逻辑操作的非与或分别是! && ||这与C语言完全一致, 不过这是在[ ]外部使用. 如果在[ ] 内部, 则必须换成-n -a -o, 对应英文的缩写.

条件测试

Linux的每个命令或函数, 在退出时都会返回一个状态给调用者, 用来表示退出状态. 退出状态是0表示成功退出, 否则是有问题. 调用exit命令返回退出状态. 如果是函数, 注意exitreturn语句是不同的. 举个例子:
建立1.sh文件

add()
{
    let r=$1+$2
    return $r
}

add_1()
{
    exit 0
}

执行source ./1.sh之后,

add 2 3
echo $?  # 这一条输出5
add_1  # 终端直接退出

可以看出, return返回的一个具体计算值, 而exit是返回了一个状态.

但是, Linux shell的if条件只能用于测试内容的退出状态, 而不是表达式或者函数的返回值, 比如新建一个文件1.sh

#!/bin/bash
add()
{
    let r=$1+$2
    return $r
}

之后建立文件2.sh

#!/bin/bash
if add $1 $2
then 
    echo add ok
else
    echo add no
fi

分别输入:

source 1.sh
source 2.sh 1 2

程序会输出:

add no

即使返回值是3, 但是仍然无法通过if条件测试, 印证了if只能测试退出状态, 而不是返回值. 而Linux中, 命令只要没有错误, 退出状态也是0, 表达式计算也相当于一个命令. 所以如果要进行表达式的值测试, 就不能直接带入if条件, 而是使用条件测试命令.

test命令就是这样的. test命令还可以用[ ] 来表示, 不过这样的话, 运算操作符号需要由 -alpha来表示, 比如<= 成为\le. test Expression, 如果表达式返回true, 则返回一个0退出值, 否则返回一个非零退出值, 如果无参数, 任然返回一个非零退出值.

举个例子:

#!/bin/bash
if test "2>3"
then
    echo no pass
else
    echo pass
fi

if [ "2>3" ] # 注意这里的弱引用, 否则就是重定向操作了!!!!!!!!!
then
    echo no pass
else
    echo pass
fi

结果输出:

no pass
no pass

两个语句是等价的, 但是注意[ ]两侧的空格是必须的!!! 上述命令是, 如果条件通过测试, 那么test返回0, 就不执行if内部的语句了.

一些常用的参数检查为:


同样的, 条件测试语句可以和其他的逻辑条件语句搭配使用.

case分支

case expression in 
	pattern 1)
		statements;;
	pattern 2)
		statements;;
	pattern3 | pattern4)
		statements;;
esac

任何一个分支, 都可以由管道连接多个pattern, 只要有一个匹配上了, 那么就执行相应的statement
比如:

case $1 in
	*.jpg) gqview $1;;
	*.txt) gvim $1;;
	*.avi | *.wmv) mplayer $1;;
	*.pdf) acroread $1;;
	*) echo $1: echo "Unkown type";;

循环

for循环

for循环的基本操作:

for name [in list]
do 
 	...
 done

list是名称列表, 也可以通过模式匹配等获取.

比如:

for file in *.txt
do 
	cat $file  # 注意变量的符号
done

如果是命令操作, 需要添加``符号

for file `find . -iname *.txt` 
do # 遍历当前目录及其子目录所有文件
	cat $file
done

如果[in list]被省略, 则默认为$@所有的参数, 比如:

for name in $@
do 
	case $name in
		-f) ...;;
		-d) ...;;
	esac
done

while/until循环

while循环, 当condition为真执行循环

while condition
do
	statements
done

until循环, condition为真跳出循环

until condition
do
	statements
done

注意如果使用命令 函数或表达式等, 需要条件测试!!!

比如:

#!/bin/bash
path=$PATH

while [ -n $path ]
do
    ls -ld $[path%%:*]
    path=${path#*:}
done

跳出循环使用break语句即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值