一分钟学会流程控制语句

什么是Linux脚本

1.Linux脚本是一种命令序列,使用脚本可以自动化执行一系列的操作。 它们经常用于自动化重复的任务和批量处理任务。在Linux中,脚本是由一系列命令组成的纯文本文件,其中包含一些特定的脚本语言格式。

2.脚本文件通常以.sh 为扩展名,要让脚本文件能够执行,需要为其设置执行权限

Linux 优点跟缺点 

优点:

1.减少动手能力:可以自动化一系列操作,从而减少动手操作

2.灵活性:脚本可以针对不同的需求进行编写,可以根据需要进行修改或扩展,因此具有很高的灵活性

3.方便管理:脚本是纯文本文件,容易进行版本控制、备份、修改和分享。

4.节省时间:脚本可以快速、准确地执行多个任务,从而节省时间和人力。

缺点:

1.可读性差:某些复杂的脚本可能难以理解,使得维护变得困难。

2.安全性问题:需要注意脚本的安全性,因为脚本可以执行任何命令,所以需要确保它不会对系统带来损害。

3.需要经常更新:随着系统和软件版本的更新,脚本也需要不断更新以保持兼容性和可用性。

关系运算符:

 

关系运算符
-eq
检测两个数是否相等,相等返回 true [ $a -eq $b ] 返回 false
-ne
检测两个数是否不相等,不相等返回 true [ $a -ne $b ] 返回
true
-gt
检测左边的数是否大于右边的,如果是,则返回 true [ $a -gt
$b ] 返回 false
-lt
检测左边的数是否小于右边的,如果是,则返回 true [ $a -lt
$b ] 返回 true
-ge
检测左边的数是否大于等于右边的,如果是,则返回 true [ $a
-ge $b ] 返回 false
-le
检测左边的数是否小于等于右边的,如果是,则返回 true [ $a
-le $b ] 返回 true
PS: eq: equql 平等的,相等的
gt: greater 较大的,大于
lt: less then 小于
举例脚本:
#!/bin/bash
if [ $1 -eq $2 ]
then
echo "$1 -eq $2 : $1 等于 $2"
else
echo "$1 -eq $2 : $1 不等于 $2"
fi
if [ $1 -ne $2 ]
then
echo "$1 -ne $2 : $1 不等于 $2"
else
echo "$1 -ne $2 : $1 等于 $2"
fi
if [ $1 -gt $2 ]
then
echo "$1 -gt $2 : $1 大于 $2"
else
echo "$1 -gt $2 : $1 不大于 $2"
fi
if [ $1 -lt $2 ]
then
echo "$1 -lt $2 : $1 小于 $2"
else
echo "$1 -lt $2 : $1 不小于 $2"
fi
if [ $1 -ge $2 ]
then
echo "$1 -ge $2 : $1 大于或等于 $2"
else
echo "$1 -ge $2 : $1 小于 $2"
fi
if [ $1 -le $2 ]
then
echo "$1 -le $2 : $1 小于或等于 $2"
else
echo "$1 -le $2 : $1 大于 $2"
fi

shell脚本

if

if语句通常由一个条件表达式和一个或多个命令组成。当条件表达式为真时,将执行if语句后跟的命令;否则将执行else关键字后跟的命令(如果存在)。

例:脚本内容

#!/bin/bash
echo "请输入一个数字:"
read num

if [[ "$num" =~ ^[0-9]+$ ]]; then
  if [ "$num" -gt 0 ] && [ "$num" -lt 10 ]; then
    echo "输入的数字是一位数。"
  elif [ "$num" -ge 10 ] && [ "$num" -lt 100 ]; then
    echo "输入的数字是两位数。"
  elif [ "$num" -ge 100 ] && [ "$num" -lt 1000 ]; then
    echo "输入的数字是三位数。"
  else
    echo "输入的数字大于等于1000或小于等于0。"
  fi
else
  echo "输入的不是一个有效的数字。"
fi
~         

 2.执行脚本

[root@mysql test]# sh user.sh 
请输入一个数字:
1
输入的数字是一位数。
[root@mysql test]# sh user.sh 
请输入一个数字:
10
输入的数字是两位数。
[root@mysql test]# sh user.sh
请输入一个数字:
100
输入的数字是三位数。
[root@mysql test]# sh user.sh
请输入一个数字:
-10
输入的不是一个有效的数字。
[root@mysql test]# sh user.sh 
请输入一个数字:
1000
输入的数字大于等于1000或小于等于0。
[root@mysql test]# sh user.sh 
请输入一个数字:
0.2
输入的不是一个有效的数字。

if...then是Bash Shell中常见的条件语句之一,用于根据某个条件来执行不同的命令

注意if...then语句后面的命令部分可以包含多条命令,使用分号将多个命令隔开即可。

例:脚本内容

#!/bin/bash
read -p "请输入第一个数字: " num1
read -p "请输入第二个数字: " num2

if [ $num1 -gt $num2 ]
then
    echo "$num1 大于 $num2"
elif [ $num1 -lt $num2 ]
then
    echo "$num1 小于 $num2"
else
    echo "$num1 等于 $num2"
fi

执行脚本

[root@mysql test]# sh user1.sh 
请输入第一个数字: 10
请输入第二个数字: 20
10 小于 20
[root@mysql test]# sh user1.sh 
请输入第一个数字: 20
请输入第二个数字: 10
20 大于 10
[root@mysql test]# sh user1.sh 
请输入第一个数字: 10
请输入第二个数字: 10
10 等于 10

 if...else

Linux Shell脚本中,if...else语句用于根据某个条件来执行不同的命令

注意:ifelse语句的每个命令之后都必须以fi来结束if...else语句,否则代码将不能正确执行。

例子:

脚本内容 

#!/bin/bash
echo "请输入第一个人的年龄: "
read age1
echo "请输入第二个人的年龄: "
read age2

if [ $age1 -gt $age2 ]
then
  echo "第一个人年龄更大。"
else
  echo "第二个人年龄更大。"
fi
~    

执行脚本 

[root@mysql test]# sh user2.sh 
请输入第一个人的年龄: 
10
请输入第二个人的年龄: 
15
第二个人年龄更大。
[root@mysql test]# sh user2.sh 
请输入第一个人的年龄: 
18
请输入第二个人的年龄: 
11
第一个人年龄更大。

 if/elif/else判断结构

 if…elif…else结构是用于在Shell脚本中进行多重条件判断的语句结构

注意:需要注意的是,在使用if…elif…else结构时,要按照先后顺序进行判断,即先判断第一个条件是否成立,如果成立则执行对应的命令并结束整个结构;如果不成立,则继续判断下一个条件,直到某个条件成立为止

例子:

脚本内容

#!/bin/bash
echo "请输入一个数字: "
read num

if [ $num -gt 0 ]
then
  echo "输入的数字是正数。"
elif [ $num -lt 0 ]
then
  echo "输入的数字是负数。"
else
  echo "输入的数字是零。"
fi
~      

执行脚本

[root@mysql test]# sh user3.sh 
请输入一个数字: 
0
输入的数字是零。
[root@mysql test]# sh user3.sh 
请输入一个数字: 
10
输入的数字是正数。
[root@mysql test]# sh user3.sh 
请输入一个数字: 
-10
输入的数字是负数。
[root@mysql test]# 

case判断结构

case 命令是 Shell 脚本中的一种条件语句,用于对变量值进行匹配并根据不同匹配结果执行相应的操作

例子:

脚本内容:

#!/bin/bash
echo "请输入一个数字"
read num
case $num in
  1)
    echo "你输入了 1"
    ;;
  2|3)
    echo "你输入了 2 或 3"
    ;;
  [4-9])
    echo "你输入了大于等于 4 的数字"
    ;;
  *)
    echo "输入错误"
    ;;
esac

执行脚本: 

[root@mysql test]# sh user4.sh
请输入一个数字
1
你输入了 1
[root@mysql test]# sh user4.sh
请输入一个数字
2
你输入了 2 或 3
[root@mysql test]# sh user4.sh
请输入一个数字
4
你输入了大于等于 4 的数字
[root@mysql test]# sh user4.sh
请输入一个数字
6
你输入了大于等于 4 的数字
[root@mysql test]# sh user4.sh
请输入一个数字
10
输入错误

  注意:在 case 命令中,分支选项可以是单个字符(比如 1),可以是多个字符或字符串(比如 2|3),也可以是范围(比如[4-9])。而最后一个 * 分支则是通配符,表示没有匹配到任何分支时执行。

function功能  

函数可以在 shell script 当中做出一个类似自订执行指令的东西,最大的功能是, 可以简化我们很多的程序码。如果输出的内容都一样,那么我就可以使用 function 来简化了! function 的语法
注意 因为 shell script 的执行方式是由上而下,由左而右, 因此
shell script 当中的 function 的设置一定要在程序的最前面, 这样才能
够在执行时被找到可用的程序段喔

例子:脚本内容

#!/bin/bash
read -p "请输入你要查询的装备类别:" INPUT
read -p "请输入装备的分数:" SCORE
function fenshu () {
if [ $SCORE -le 30 ];then
echo "品相极品渣!"
elif [ $SCORE -gt 30 -a $SCORE -le 65 ];then
echo "渣渣!"
elif [ $SCORE -gt 65 -a $SCORE -le 95 ];then
echo "嗯,这才像个样!"
elif [ $SCORE -gt 95 ];then
echo "谁与争锋!"
else
echo "输入有误!"
fi
}


function chongzhu () {
read -p "请问是否选择重铸!Y/N" YN
if [ $YN == Y ];then
read -p "好的,用户选择重铸"
elif [ $YN == N ];then
echo "用户不重铸,886!"
else
echo "输入有误!"
fi
}


case $INPUT in
头盔)
fenshu;chongzhu;;
大剑)
fenshu;chongzhu;;
胸甲)
fenshu;chongzhu;;
*)
echo "没有这个装备";;
esac
~      

 执行脚本

[root@mysql test]# sh user8.sh 
请输入你要查询的装备类别:头盔
请输入装备的分数:50
渣渣!
请问是否选择重铸!Y/NY
好的,用户选择重铸
[root@mysql test]# sh user8.sh 
请输入你要查询的装备类别:胸甲
请输入装备的分数:100
谁与争锋!
请问是否选择重铸!Y/NN
用户不重铸,886!
[root@mysql test]# 

while循环、until do done(不定循环) 

shell中的循环主要有forwhileuntilselect几种

while

Linux中的while循环可以用于执行一系列重复的命令,直到条件不再成立。

while [ condition ] //状态的判读
do //循环的开始
command
done //循环的结束
while 的中文是 .... ,所以,这种方式说的是 condition 条件成立
时,就进行循环,直到 condition 的条件不成立才停止 的意思

例子 :脚本内容

#!/bin/bash
n=1
while [ $n -le 10 ]
do
    echo "$n"
    n=$((n+1))
done
~     

执行脚本

[root@mysql test]# sh user5.sh
1
2
3
4
5
6
7
8
9
10

 untile循环

Linux中的until循环与while循环类似,只不过是在条件不成立时执行循环体内的命令

until [ condition ]
do
command
done
这种方式恰恰与 while 相反,它说的是“当 condition 条件成立时,就终止
循环, 否则就持续进行循环的程序段。
我们先用while举个小例子。

例子:脚本内容

#!/bin/bash
while [ "${yn}" != "yes" ]
do
read -p "请输入'yes'退出: " yn
done
echo "退出成功!."

执行脚本

[root@mysql test]# sh user6.sh 
请输入'yes'退出: no
请输入'yes'退出: ha
请输入'yes'退出: yes
退出成功!.

 for循环

是最常见的循环结构。for循环是一种运行前测试语句,也就是在运行任何 循环体之前先要判断循环条件是否成立,只有在条件成立的情况下才会运 行循环体,否则将退出循环。每完成一次循环后,在进行下一次循环之前 都会再次进行测试。 带列表的for循环

for var in con1 con2 con3
do
command
done
\1. 第一次循环时,的 $var 内容为 con1
\2. 第二次循环时, $var 的内容为 con2
\3. 第三次循环时, $var 的内容为 con3

 

例子:脚本内容

#!/bin/bash
for (( n=1; n<=10; n++ ))
do
    echo "$n"
done

执行脚本

[root@mysql test]# sh user7.sh 
1
2
3
4
5
6
7
8
9
10
[root@mysql test]# 

Cfor循环  

格式如下:
for ((expression1; expression2; expression3))
do
command
done
其中, expression1 为初始化语句,一般用作变量定义和初始化;
expression2 为判断表达式,用于测试表达式返回值并以此控制循环,返回
值为真则循环继续,返回值为假则退出循环; expression3 用于变量值修
改,从而影响 expression2 的返回值,并以此影响循环行为。

[root@sunday-test shell-script]# cat c_for01.sh
#!/bin/bash
for ((i=1;i<=10;i++))
do
echo -n "$i "
done
[root@localhost ~]# ./t2.sh
12345678910

总结:

1 while循环的特长是执行守护进程以及我们希望循环不退出持续执行的 情况用于频率小于一分钟循环处理,其他的while循环几乎都可以被for循 环替代。
2 case语句可以替换if语句,一般在系统启动脚本传入少量固定规则字符串,用case语句。其他普通判断多用if语句。
3 iffor语句最常用,其次是while(守护进程)case(服务启动脚本)各个语句的应用场景:
条件表达式,简单的判断(文件是否存在,字符串是否为空等)。
if 取值判断,不同值数量较少的情况。
for 循环正常的循环处理,最常用!
while 循环守护进程、无限循环( sleep )。
case 服务启动脚本,菜单。
函数逻辑清晰,减少重a

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值