Linux常用命令:条件控制语句全解析

本文详细介绍了Linux中的条件控制语句(如if,ifelse,ifelse-ifelse)、循环语句(for,while,until)、跳出语句(case,break,continue),以及如何在实际场景中编写脚本,如搜索文件中的关键字。
摘要由CSDN通过智能技术生成

目录

1.简介

2.条件语句

2.1 if语句

2.2 if else语句

2.3 if else-if else语句

3.循环语句

3.1 for语句

3.2 while语句

3.3 until语句

4.跳出语句

4.1 case 语句

4.2 break 语句

4.3 continue 语句

5.解决疑问


在前面的Linux系统的基础学习中,我们已经学习了很多命令行操作。尤其是在我们学习awk结构化操作操作后,相信大家对结构化的操作更加清晰了。

当然,有些时候,我们不知是针对文本进行操作,我们会写一些Linux的操脚本来实现自动化操作,比如说,如果你想打开100个文本文件,同时,查看这些文件中是否存在一个关键字“work”

那么,你一定不会机械化的一个个点开,你一定会想一个便捷的办法去做这些机械化的事情。

所以,今天我们来学习一下Linux的结构化条件控制语句。本文将详细介绍Linux中的条件控制语句,包括if、if else、if else-if else、for、while、until、case、break、continue等,并给出相应的示例代码。

相信今天的学习,你一定会解决上面的疑问。

1.简介

语法描述
if条件语句
if else条件判断语句
if else-if else多条件判断语句
for循环执行命令
while循环执行命令
until直到条件为真时停止循环
case ... esac多选择语句
break跳出循环
continue跳出当前循环

2.条件语句

2.1 if语句

if语句是Linux中最基本的条件控制语句,很容易发现,它与C、Python这些语言不同,它的判断语句后,需要用 then 指明,结束部分用 fi 指明。语言它的语法格式如下:

if [ condition ]
then
    command1
    command2
    ...
fi


其中,condition是一个条件表达式,如果它的值为真,则执行then后面的命令。

写成test.sh脚本,内容如下:

#!/bin/bash

# 判断当前用户是否为root用户
if [ $USER == "root" ]
then
    echo "You are the root user."
fi

执行脚本,

# 执行脚本
bash test.sh



# 输出如下:
You are the root user.

如果不想写脚本,可以写出一行,但是要以;分开:

if [ $USER == "root" ]; then     echo "You are the root user."; fi


2.2 if else语句

if else语句是if语句的扩展,它可以在条件不满足时执行另一段代码。语法格式如下:

if [ condition ]
then
    command1
    command2
    ...
else
    command3
    command4
    ...
fi


例如,以下代码判断当前目录下是否存在一个名为file.txt的文件:

# 判断当前目录下是否存在一个名为file.txt的文件,图方便写成一行。
if [ -f file.txt ]; then     echo "file.txt exists."; else     echo "file.txt does not exist."; fi



# 输出如下:
file.txt exists.


2.3 if else-if else语句

if else-if else语句是if else语句的进一步扩展,它可以判断多个条件并执行相应的代码块。不过需要注意的是,Linux中的if语句并不直接支持else-if语法,但可以通过嵌套if语句来实现类似的功能。例如:

if [ condition1 ]
then
    command1
elif [ condition2 ]
then
    command2
else
    command3
fi

这里使用了elif来替代else-if。注意,elif和else都是可选的,可以根据需要省略。

这里创建一个testIF.sh,内容如下:

#!/bin/bash
a=1
b=2
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

执行代码:

# 执行代码
$ bash testIF.sh



# 输出结果:
a 小于 b

3.循环语句

3.1 for语句

for语句,定量循环,可以遍历一个列表或数组中的元素一,并对每个元素执行相应的操作。语法格式如下:

for variable in list
do
    command1
    command2
    ...
done

示例,以下代码遍历当前目录下的所有文件,并输出每个文件的名称:

# 遍历当前目录下的所有文件,并输出每个文件的名称
for file in *; do     echo $file; done


3.2 while语句

while语句,入口循环语句,可以根据条件重复执行一段代码,语法如下:

while [ condition ]
do
    command1
    command2
    ...
done

我们写一个bash脚本,testWhile.sh内容如下:

#!/bin/bash
while true
do
   echo "Hello, world!"
   sleep 1 # 等待1秒钟后再次输出
done

运行这个脚本:

# 运行这个脚本
$ bash testWhile.sh


# 输出:
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!

代码会不断输出"Hello, world!",直到用户手动中断程序为止,按住 Ctrl + C ,停止输出。

3.3 until语句

until语句也可以根据条件重复执行一段代码。只不过它的条件判断是相反的:只要condition的值为假,就会一直执行do和done之间的命令。

until condition
do
    command
done

例如以下代码会不断询问用户是否要退出程序,并在用户输入"yes"时退出程序:

#!/bin/bash
until [ "$answer" == "yes" ]
do
    echo "Do you want to exit? (yes/no)"
    read answer # 读取用户的输入并保存到answer变量中
done
echo "Exiting..." # 当用户输入"yes"时执行此命令并退出程序

4.跳出语句

4.1 case 语句

case 语句用于执行多个条件测试,每个条件称为一个case,并根据第一个匹配的条件执行相应的代码块。这个类似于C语言的Swith语句。

case 语句的结构如下:

case variable in
pattern1)
    # 执行当 variable 匹配 pattern1 时的命令
    ;;
pattern2)
    # 执行当 variable 匹配 pattern2 时的命令
    ;;
...
*)
    # 如果 variable 不匹配任何模式,则执行这里的命令
    ;;
esac

;; 表示一个模式的结束。*) 是一个通配符模式,匹配任何值。

示例,创建一个testCase.sh脚本,内容如下:

#!/bin/bash

day="Monday"

case $day in
    Monday)
        echo "Today is Monday."
        ;;
    Tuesday)
        echo "Today is Tuesday."
        ;;
    Wednesday)
        echo "Today is Wednesday."
        ;;
    *)
        echo "It's not Monday, Tuesday, or Wednesday."
        ;;
esac

执行脚本:

# 执行脚本
bash testCase.sh



# 输出
Today is Monday.

4.2 break 语句

break 语句用于跳出当前循环(for、while 或 until 循环),并终止循环的执行。如果 break 语句用在 case 语句中,则用于跳出 case 语句,终止模式匹配。

示例1:

# 创建脚本 testBreak.sh ,内容如下:
#!/bin/bash

for i in {1..10}
do
    if [ $i -eq 5 ]; then
        break
    fi
    echo $i
done




# 执行脚本
bash testBreak.sh


# 输出结果:
1
2
3
4

这个脚本会打印从 1 到 4 的数字,当 $i 等于 5 时,break 语句会终止 for 循环。

示例2(在 case 语句中使用 break):

# 创建一个脚本 testBreak2.sh
#!/bin/bash

while true
do
    read -p "Enter a number (1-3): " num
    case $num in
        1|2|3)
            echo "You entered $num."
            break
            ;;
        *)
            echo "Invalid number. Please try again."
            ;;
    esac
done



# 执行代码
bash testBreak2.sh



# 输出结果,输入3
Enter a number (1-3): 3
You entered 3.

在这个脚本中,break 语句用于在输入 1、2 或 3 后退出 while 循环。

4.3 continue 语句

continue 语句用于跳过当前循环迭代的剩余部分,并开始下一次迭代。如果 continue 语句用在 case 语句中,则用于跳过当前模式,并继续匹配下一个模式。

示例1:

# 创建一个脚本 testcon1.sh 内容如下:

#!/bin/bash

for i in {1..10}
do
    if [ $i -eq 5 ]; then
        continue
    fi
    echo $i
done


# 执行脚本
bash testcon1.sh


# 输出结果
1
2
3
4
6
7
8
9
10

这个脚本会打印从 1 到 10 的数字,但会跳过数字 5,因为当 $i 等于 5 时,continue 语句会跳过循环体的剩余部分。

示例(在 case 语句中使用 continue):

# 创建一个脚本 testcon2.sh 内容如下:

#!/bin/bash

while true
do
    read -p "Enter a number (1-3): " num
    case $num in
        1|2|3)
            echo "You entered $num."
            ;;
        *)
            echo "Invalid number. Please try again."
            continue
            ;;
    esac
    break  # 终止 while 循环,因为 continue 已经处理了无效输入的情况
done




# 执行脚本
bash testcon2.sh


# 输出结果
Enter a number (1-3): 3
You entered 3.

在这个脚本中,如果输入的不是 1、2 或 3,continue 语句会跳过 case 语句的剩余部分,并继续下一次 while 循环的迭代。由于紧接着有一个 break 语句,所以循环会在处理完无效输入后终止。

5.解决疑问

好了,学习了那么多,可以前面提到的问题了:如果你想打开100个文本文件,同时,查看这些文件中是否存在一个关键字“work”

首先,创建一个名为:testProblem.sh的文件,内容如下:

#!/bin/bash

# 假设你的文件都位于同一个目录中,并且文件名以.txt结尾
# 使用for循环遍历文件
for file in *.txt; do
    # 使用grep命令查找关键字"work"
    if grep -q "work" "$file"; then
        echo "关键字'work'在文件$file中找到"
    else
        echo "关键字'work'未在文件$file中找到"
    fi
done

运行代码:

# 执行脚本
bash testProblem.sh



# 这是我的目录,具体输出要看你自己的,输出如下:
关键字'work'未在文件file1.txt中找到
关键字'work'未在文件file2.txt中找到
关键字'work'未在文件file.txt中找到
关键字'work'未在文件grades.txt中找到

如果您是跟着我一起敲代码学习的,相信您一定懂得了很多。

如果感觉阅读对您还有些作用,可以评论留言,关注我。谢谢您的阅读!

敬请关注!

往期学习笔记:

Windows系统开启Linux子系统(Ubuntu)

Linux常用命令(目录操作命令)

Linux常用命令:文件的创建、复制、移动、查找和删除命令

Linux常用命令:文本文件的查看与编辑

Linux常用命令:文本文件的拼接与分割

Linux常用命令:文件的权限管理

Linux常用命令:文件的下载、压缩与解压

Linux常用命令:常见的操作符

Linux常用命令:系统操作命令
 

 Linux文本处理三剑客:grep

Linux文本处理三剑客:sed

Linux文本处理三剑客:awk

Linux文本处理三剑客:awk(常用匹配模式)

Linux文本处理三剑客:awk(结构化命令)

Linux文本处理三剑客:awk(对具体文本的示例代码)

Linux文本处理三剑客:awk(内置函数详解笔记) 

Linux文本处理三剑客:awk(用户自定义函数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TiYong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值