Shell脚本循环语句与函数

目录

一、循环语句

1、for循环语句

1.1、for—列表循环

案例一:输出一到五序列

案例二:打印6次“Goodbye”

案例三:打印abcde

案例四:输入0-50之间的偶数

1.2、for—不带列表循环

案例一:打印“Goodnight”

1.3、类C风格的for循环

案例一:打印1-6

案例二:打印1-20的奇数

案例三:计算1-100的奇数和

2、while循环语句

2.1、while死循环 

2.2、循环控制语句

案例一:输出1-10

案例二:输出1-20之间不能被4整除的数字

案例三:输出1-100的和

二、Shell函数

1、Shell函数的语法格式(两种)

2、函数返回值

3、函数的调用

4、函数的作用范围

5、函数的参数

5.1、计算位置变量$1和$2的和

5.2、调用函数删除文件

6、 return返回值

7、函数的递归


一、循环语句

1、for循环语句

for循环语句,是根据次数来控制循环,对每一个元素进行操作,一直到使用玩元素退出循环。

  • for循环语句的结构 

1.1、for—列表循环

  • 使用格式:
for 变量名 in {list}
do
    command
done

案例一:输出一到五序列
[root@localhost ceshi]# vim ceshi1.sh

#!/bin/bash
#需求:输出1-5
for i in {1..5}
do
  echo $i
done

  • 结果 

案例二:打印6次“Goodbye”
[root@localhost ceshi]# vim ceshi2.sh

#!/bin/bash
#需求:打印6次Goodbye
for i in {1..6}
do
  echo "Goodbye"
done

案例三:打印abcde
[root@localhost ceshi]# vim ceshi3.sh

#!/bin/bash
#需求:打印abcde
for i in a b c d e
do
  echo $i
done

案例四:输入0-50之间的偶数
[root@localhost ceshi]# vim ceshi4.sh

#!/bin/bash
#需求:输出0-50之间的偶数
for i in {0..50..2}
do
   echo $i
done

1.2、for—不带列表循环

  • 使用格式
for 变量名 
do
    command
done
  • 注意:需要在运行脚本时添加列表参数
案例一:打印“Goodnight”
  • 第一种
[root@localhost ceshi]# vim ceshi5.sh

#!/bin/bash
#需求:打印Goodnight
for i
do
   echo "Goodnigth"
done

  • 第二种
[root@localhost ceshi]# vim ceshi6.sh

#!/bin/bash
for i
do
  echo $i
done

1.3、类C风格的for循环

  • 语法格式
for ((expr1;expr2;expr3))
do
       command
done

expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出

注:

  •     i++ : i=1+1 先赋值再运算 i=1 之后 再 +1
  •     ++i : 1+1=i 先运算再赋值 1+1 之后 再=i 

运算符用法:

操作符说明示例结果(假设变量 x 初始值为 10)
++自身变量 + 1x++x 变为 11
--自身变量 - 1x--x 变为 9
+=5自身变量 + 5x += 5x 变为 15
-=5自身变量 - 5x -= 5x 变为 5
*=5自身变量 * 5x *= 5x 变为 50
/=5自身变量 / 5x /= 5x 变为 2
%=5自身变量 % 5x %= 5x 变为 0
案例一:打印1-6
[root@localhost ceshi]# vim ceshi7.sh

#!/bin/bash
for (( i=1; i<=6; i++))
do
   echo $i
done

案例二:打印1-20的奇数
[root@localhost ceshi]#  vim ceshi8.sh

#!/bin/bash
for (( i=1; i<=20; i+=2))
do
   echo $i
done

案例三:计算1-100的奇数和
[root@localhost ceshi]# vim ceshi9.sh

#!/bin/bash
sum=0
for (( i=1; i<=100; i++))
do
   let sum=$i+$sum
done
  echo "1-100的奇数和为:$sum"


2、while循环语句

while循环语句根据判断条件(表达式)来是否执行下一条的指令,如果为真,则执行,如果为假,则跳出循环。

  • 语法格式
while 表达式
do
    command
done
  • while循环语句的结构 

2.1、while死循环 

死循环一:

//写一个永远为真的表达式,1等于1这个条件永远为真,所以这个脚本会一直循环下去
while [ 1 -eq 1 ]  
    command
done

死循环二:

while true
do
    command
done

死循环三:

while :
do
    command
done

2.2、循环控制语句

①、exit语句:

exit命令用于终止整个脚本的执行。可选的参数n是一个整数值,表示脚本的退出状态。通常,0表示成功,非零值表示出现了错误

②、break:

break命令用于跳出循环。当遇到break时,程序会立即跳出当前的循环结构,并执行循环后面的语句

③、continue:

continue命令用于结束当前循环的迭代,然后继续下一次迭代。当程序执行到continue时,会立即停止当前迭代并进入下一次循环迭代

总结

命令功能描述使用示例
exit直接跳出程序,后面可跟状态返回码如 exit 1 等等exit 0
break立即终止当前循环,执行循环体外的代码break
continue跳过当前循环的剩余部分,开始下一次循环continue

案例一:输出1-10

[root@localhost ceshi]# vim ceshi10.sh

#!/bin/bash
i=1
while [ $i -le 10 ]
do
  echo $i
  let i++
done
  echo "i最终值为:$i"

案例二:输出1-20之间不能被4整除的数字

[root@localhost ceshi]#

#!/bin/bash
i=1
while [ $i -le 20 ]
do
  if [[ $i%4 -ne 0 ]];then
    echo "$i"
  fi
    let i++
done

案例三:输出1-100的和

[root@localhost ceshi]# vim ceshi12.sh

#!/bin/bash
i=1
sum=0
while [ $i -le 100 ]
do
   let sum=$i+$sum
   let i++
done
   echo "1-100的和为:$sum"

二、Shell函数

1、Shell函数的语法格式(两种)


function 函数名 {
command
}       //这是一种规范写法


或者

函数名(){     //最常用因为最简洁
command
} 

  • 函数定义完之后并不会自动执行,需要调用才行,好处在于可以写一段功能代码作为函数,有需要就直接调用
  • 定义的时候哪怕出现语法错误也没关系,不调用就不会报错
  • 当然我们写函数最终目的还是为了调用,为了实现某个功能块

2、函数返回值

return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值

函数使用原则:

  • 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
  • 退出状态码必须是0~255,超出时值将为取余256 

3、函数的调用

        直接在脚本里定义函数的代码块后写函数名即可完成调用


[root@localhost ceshi]# vim ceshi1.sh

#!/bin/bash
function zmx {
  echo "this is cxc"
}
zmx

[root@localhost ceshi]# sh ceshi1.sh 
this is cxc


①、注意:函数名必须是唯一,如果先定义了一个,再用同样的名称定义,第二个会覆盖第一个的功能,出现了你不想要的结果,所以这里一定要注意不要重名!

例如:

[root@localhost ceshi]# vim ceshi2.sh

#!/bin/bash
f6 (){
echo oppo
}

f6 (){
echo Good
}
f6

[root@localhost ceshi]# sh ceshi2.sh 
Good

②、注意:注意②:调用函数之前必须先进行定义!


[root@localhost ceshi]# vim ceshi3.sh

#!/bin/bash
f1 (){
echo hello
}


f3 (){
echo "$(f1) $(f2)"
}



f2 (){
echo world
}

f3

[root@localhost ceshi]# sh ceshi3.sh 
hello world


③、注意:注意③:不一定要在脚本开头就定义函数,只要调用之前定义就可以

如果是在其他地方嵌套调用等情况,不可以直接写函数的值,避免无法识别,可以用反撇号引起来,相当于是调用函数的结果

[root@localhost ceshi]# vim ceshi4.sh

#!/bin/bash
f1 (){
echo hello
}

f2 (){
echo world
}

f3 (){
echo "`f1` `f2`"   
}

f3

[root@localhost ceshi]# sh ceshi4.sh 
hello world


 

4、函数的作用范围

  • 在 Shell 脚本中函数的执行并不会开启一个新的子 Shell,而是仅在当前定义的 Shell 环境中有效。
  • 如果Shell脚本中的变量没有经过特殊设定,默认在整个脚本中都是有效的。
  • 在编写脚本时,有时需要将变量的值限定在函数内部,可以通过内置命令local来实现。
  • 函数内部变量的使用,可以避免函数内外同时出现同名变量对脚本结果的影响。
     

local命令:将变量限定在函数内部使用

[root@localhost ceshi]# vim ceshi5.sh

fun (){
local i
i=66
echo $i
}

i=99
fun
echo $i

[root@localhost ceshi]# sh ceshi5.sh 
66
99
  • fun 函数外部同样定义了变量i,内部变量i和全局变量i互不影响。脚本执行时先调用了函数fun,函数内部变量i为66,所以输出结果是66。调用完函数之后,给变量i赋值为99,再打印外部变量i,所以又输出 99。

5、函数的参数

语法格式

函数名称 参数1 参数2 参数3..........

5.1、计算位置变量$1和$2的和

[root@localhost ceshi]# vim ceshi6.sh

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

add 4 5

[root@localhost ceshi]# sh ceshi6.sh 
9

5.2、调用函数删除文件

[root@localhost home]# vim ceshi1.sh

#!/bin/bash
fun (){
rm -rf $1
}
fun /home/ceshi.txt

6、 return返回值

函数的返回值就是函数当中运行最后一条命令的状态码,默认成功为0,失败为非0值,可以通过$?查看

  • return的值范围是0-255
  • 遇到return即结束函数不会再往下执行
[root@localhost home]# vim ceshi2.sh

#!/bin/bash
FILE=/home/kfc
test (){
if [ -f $FILE ];then
  return 100
else
  return 200
fi
}
test


7、函数的递归

函数自己调用自己的本身


案例:筛选目录

[root@localhost home]# vim ceshi3.sh

#!/bin/bash
list(){
for i in $1/*
do
        if [ -d $i ];then
        echo -e "\e[34m$i\e[0m"
        list $i " $2"
        else
        echo "$2$i"
fi
done
}
list $1 $2

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Ubuntu系统中,shell脚本循环语句的写法可以采用while循环来实现。具体的语法如下所示: ```shell #!/bin/bash while [ condition ] do # 循环体 done ``` 在这个语法中,你需要将`condition`替换为一个条件表达式,只有当条件表达式为真时,循环体中的代码才会被执行。你可以在循环体内部编写需要重复执行的代码。当条件表达式为假时,循环会终止。 例如,如果你想要实现一个简单的循环,直到用户输入"close"为止,可以使用以下的代码: ```shell #!/bin/bash value="" while [ "$value" != "close" ] do read -p "请输入字符串:" value done echo "停止循环!" ``` 这个脚本会不断要求用户输入字符串,直到输入的字符串为"close"为止。一旦输入的字符串为"close",脚本会输出"停止循环!"。注意,`read`命令用于读取用户的输入,并将其赋值给`value`变量。 希望这个答案能满足你的需求,如果你还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux(ubuntu)shell脚本条件判断函数和循环(入门必看)](https://blog.csdn.net/weixin_68773927/article/details/126780831)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值