Shell编程4_流程控制和函数

 

目录

一、Shell流程控制

1、条件语句

(1)单分支if

(2)多分支if

2、循环语句

(1)for循环

(2)while循环

(3)until 循环

(4)break 与 continue

(5)case 语句

二、Shell函数

(1)函数的标准语法

函数的简化语法—>不推荐使用

(2)函数的调用

(3)参数

(4)函数返回值


一、Shell流程控制

1、条件语句

(1)单分支if

只有一个 if 语句块包含的语句,condition 为正确则执行 then 内的命令,语法格式:

if condition
then
    command1 
    command2
    ...
    commandN 
fi

(2)多分支if

顾名思义有多个 if 条件,在此利用 elif 来表示,注意最后有一个 else 结尾。

if condition1;then
    command1
elif condition2;then 
    command2
    ...
...
elif conditionN,then
	commandN
else
    command
fi

示例:判断sshd程序是否存在

if [ $(ps -ef |grep /usr/sbin/sshd|grep -v grep|wc -l) -eq 1 ];then 
	echo "sshd server exist"
else
	service sshd start && echo "启动sshd服务"
fi

2、循环语句

(1)for循环

默认 for 循环的取值列表是以 $IFS 分割,默认 $IFS 为空白符,如果我们有其他需求可以更改,语法为:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

通过 for 循环每次遍历一个后面跟的对象,在 do…done 操作块中对对象进行一些列操作。

例如我们来求和 1-10 的和:

SUM=0
for num in $(seq 1 10)
do
	let SUM=${SUM}+${num}
done
echo "1-10的和为:${SUM}"

修改 $IFS 的应用场景,首选备份默认当前的 $IFS,之后为其赋值新的 $IFS:,执行一系列操作后,恢复之前的 $IFS

#!/bin/bash
OLD_IFS=$IFS
IFS=":"
...
IFS=${OLD_IFS}

(2)while循环

while 循环通常用于处理未知数量对象的操作,语法:

while 条件表达式:do
    command
done

while 通常与 test 语句配合使用,如果条件表达式成立,则一直执行。例如求和打印 1-5 个数:

注:let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。

#!/bin/bash
N=0
while [ $N -lt 5 ]; do
  let N++
  echo $N
done

(3)until 循环

until 循环,条件表达式为 true 时停止,否则一直运行,语法:

until 条件表达式
do
    command
done

例如我们使用 until 来打印 1-5 数字:

NUM=0
until [ ${NUM} -ge 5 ]
do 
	let NUM++
	echo $NUM
done

(4)break 与 continue

break 为跳出循环,continue 则为不执行下一次操作,直接跳到下一次循环。示例:

#!/bin/bash

N=0
while true; do
    let N++
    if [ $N -eq 5 ]; then
    break
    fi
    echo $N
done

(5)case 语句

选择语句 case 可以在特定的几个条件中选择某一个进行执行,其他 case 可以利用 if 多分支来替代。

case 模式名	in
    模式 1)
        命令
        ;;
    模式 2)
        命令
        ;;
    *)
        不符合以上模式执行的命令
esac

应用示例:

#!/bin/bash
case $1 in
    start)
        echo "start."   
        ;;
    stop)
        echo "stop."
        ;;
    restart)
        echo "restart."
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
esac

二、Shell函数

Shell 和其他语言一样,也有函数,其本质就是一段可以复用的代码。将数据进行抽离处理,传递不同的值输出不同的结果,在指定的地方进行调用即可。

(1)函数的标准语法

function fnname() { 
	statements
	return value
}

对各个部分的说明:

  • function 是 Shell 中的关键字,专门用来定义函数;
  • fname 是函数名;
  • statements 是函数要执行的代码,也就是一组语句;
  • return value 表示函数的返回值,其中 return 是 Shell 关键字,专门用在函数中返回一个值,这一部分可以写也可以不写。

函数的简化语法—>不推荐使用

函数名后无括号

#简化写法1
function fname{ 
	statements
	return n
}

函数不写 function

#简化写法2:
fname() {
	statements
	return n
}

注意:在函数定义中需要函数名称后可以有多个空格,括号内也可以有多个空格,如果函数体写在一行,需要在语句末尾加上 ;

(2)函数的调用

Shell 脚本中,函数在定义时候不能指定参数,在调用的时候传递参数即可,并且在调用函数时传递什么参数函数就接受什么参数。

// 定义函数
function fnname() { 
	statements
	return value
}

// 调用函数
fname param1 param2 param3

(3)参数

在 Shell 中特殊含义的参数

Shell编程4_流程控制和函数_第1张图片

注意:局部变量需要特别声明在函数内部利用 local 关键字来声明。

(4)函数返回值

函数中返回利用 return 关键字,在函数调用完成后,我们利用 $? 来接受函数的返回值。

注意:shell 函数的返回值,只能是整形,并且在 0-257 之间,不能是字符串或其他形式。并且在调用方法和取得返回值之间,不能有任何操作,不然取不到 return 的值。

[root@master func]# cat f1.sh 
#!/bin/bash

function fsum() {
        echo "函数第一个参数为: ${1}"
        echo "函数第二个参数为: ${2}"
        echo "函数第三个参数为: ${3}"
        echo "函数的参数总数为: ${#}"
        echo "函数的参数总数为: ${@}"
        local sum=0
        for num in ${@};
        do
                let sum=${sum}+${num}
        done
        return $sum
}


fsum 10 20 1 2
echo $?
[root@master func]# bash f1.sh 
函数第一个参数为: 10
函数第二个参数为: 20
函数第三个参数为: 1
函数的参数总数为: 4
函数的参数总数为: 10 20 1 2
33

你可能感兴趣的:(Linux)