Shell流程控制和传参

本文详细介绍了Shell编程中的流程控制结构(if、ifelse、casein、for和while循环),以及如何传递参数和调用函数,展示了基础语法和示例应用。
摘要由CSDN通过智能技术生成

一、Shell流程控制

1、if 语句

条件判断语句基本语法格式为:

[ condition ] 
或者 
(( condition ))

1.1 if语句

基本语法格式为:

if  condition
then
    command1 
    command2
    ...
    commandN 
fi

注意:

  • 最后必须以fi来闭合,fi 就是 if 倒过来拼写。也正是有了 fi 来结尾,所以即使有多条语句也不需要用{ }包围起来。
  • 可以将 then 和 if 写在一行,或者整个语句写成一行。

示例如下:

#!/bin/bash

a=10
b=20

if [ $a == $b ]
then
    echo "a和b相等"
fi

1.2 if else语句

基本语法格式为:

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

示例如下:

#!/bin/bash

a=10
b=20

if [ $a == $b ]
then
    echo "a和b相等"
else
	echo "没有符合的条件"  #输出
fi

1.3 if else-if else语句

基本语法格式为:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

示例如下:

#!/bin/bash

a=10
b=20

if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"   #输出
else
   echo "没有符合的条件"
fi

echo "ends"

在这里插入图片描述

2、case in语句

当分支较多,并且判断条件比较简单时,使用 case in语句就比较方便了。

基本语法格式为:

case expression in
    pattern1)
        statement1
        ;;
    pattern2)
        statement2
        ;;
    pattern3)
        statement3
        ;;
    ……
    *)
        statementn
esac

case、in 和 esac 都是 Shell 关键字,expression 表示表达式,pattern 表示匹配模式。

  • expression 既可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要能够得到 expression 的值就可以。
  • pattern 可以是一个数字、一个字符串,甚至是一个简单的正则表达式。

case 会将 expression 的值与 pattern1、pattern2、pattern3 逐个进行匹配:

  • 如果 expression 和某个模式(比如 pattern2)匹配成功,就会执行这模式(比如 pattern2)后面对应的所有语句(该语句可以有一条,也可以有多条),直到遇见双分号;;才停止;然后整个 case 语句就执行完了,程序会跳出整个 case 语句,执行 esac 后面的其它语句。
  • 如果 expression 没有匹配到任何一个模式,那么就执行*)后面的语句(表示其它所有值),直到遇见双分号;;或者esac才结束。)相当于多个 if 分支语句中最后的 else 部分。

说明:

  • 这里的;;和*)就相当于其它编程语言中的 break 和 default作用类似,
  • Shell也可以没有*)部分。如果 expression 没有匹配到任何一个模式,那么就不执行任何操作。

示例如下:

#!/bin/bash

echo '请输入输入数字:'
echo '你输入的数字为:'
read aNum

case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

echo "ends"

在这里插入图片描述

3、for循环

for 循环是 Shell 脚本中常用的一种循环,它更加灵活易用,更加简洁明了。Shell for 循环有两种使用形式。

3.1 C语言风格的 for循环

基本语法格式为:

for((exp1; exp2; exp3))
do
    command1 
    command2
    ...
    commandN
done
  • do 和 done 是 Shell 中的关键字。

跳出循环命令:

  • break 命令允许跳出所有循环(终止执行后面的所有循环)。
  • continue 命令不会跳出所有循环,仅仅跳出当前循环。

示例如下:

#!/bin/bash

sum=0
for ((i=1; i<=10; i++))
do
	if(( i == 5 )) 
	then
        continue
	elif(( i > 10 )) 	
	then	
		break
	else 
		((sum += i))
		echo "i = $i,sum = : $sum"
    fi	
done

echo "The sum is: $sum"

在这里插入图片描述

3.2 Python风格的 for in循环

基本语法格式为:

for variable in value_list
do
    command1 
    command2
    ...
    commandN
done
  • variable 表示变量,value_list 表示取值列表,in 是 Shell 中的关键字。
  • 取值列表 value_list 的形式有多种,你可以直接给出具体的值,也可以给出一个范围,还可以使用命令产生的结果,甚至使用通配符。

示例如下:

#!/bin/bash

sum=0
for n in {1..100}
do
    ((sum+=n))
done
echo "The sum is: $sum"

4、while循环

while 循环是 Shell 脚本中最简单的一种循环,当条件满足时,while 重复地执行一组语句,当条件不满足时,就退出 while 循环。

基本语法格式为:

while condition
do
    command
done

示例如下:

#!/bin/bash

i=1
sum=0

while ((i <= 100))
do
    ((sum += i))
    ((i++))
done

echo "The sum is: $sum"

二、传递参数

运行 Shell 脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用 $n的形式来接收,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。同样,在调用函数时也可以传递参数。

Shell 函数参数的传递和其它编程语言不同,没有所谓的形参和实参,在定义函数时也不用指明参数的名字和数目。

这种通过 $n的形式来接收的参数,在 Shell 中称为位置参数(命令行参数)。注意:$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

在这里插入图片描述

1、给脚本文件传递位置参数

示例如下:脚本名为 test.sh

#!/bin/bash

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

echo "-- \$* 演示 ---"
for i in "$*"; do
    echo $i
done

echo "-- \$@ 演示 ---"
for i in "$@"; do
    echo $i
done

运行 test.sh,并附带参数:

注意:附带多个参数时,参数之间以空格分隔。

在这里插入图片描述

2、给函数传递位置参数

示例如下:脚本名为 test1.sh

#!/bin/bash

#定义函数
function func(){
    echo "Language: $1"
    echo "URL: $2"
}

#调用函数
func 百度 http://www.baidu.com

运行 test1.sh:

[root@centos7 tmp]# . ./test1.sh
Language: 百度
URL: http://www.baidu.com

– 求知若饥,虚心若愚。

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值