Linux -----------------------Shell &流程判断

这篇具有很好参考价值的文章主要介绍了Linux -----------------------Shell &流程判断。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是shell


        Shell是操作系统的用户界面,负责接收和解释用户的命令,并将这些命令转化为操作系统内部能够理解的指令,然后执行相应的操作。Shell还允许用户编写脚本,以自动化和批处理任务,从而提高效率。在Linux系统中,有多种不同的Shell可供选择,如Bash、Zsh、Korn Shell等,用户可以根据需要选择最适合他们的Shell来管理和控制系统。这种用户与操作系统之间的交互方式使得Linux系统非常灵活和强大,因为它允许用户以不同的方式自定义和操作系统进行交互。

Linux -----------------------Shell &流程判断,linux,运维,服务器

shell的种类

        Linux系统提供多种不同的Shell以供选择。在Linux系统中,默认的Shell是Bourne Again Shell(bash)。:

  linux常用的三种shell:

  Linux中的shell有多种类型,其中最常用的三种是bourne shell(sh)、c shell(csh)、korn shell(ksh)。

  Bourne shell

  Bourne shell 是一个交换式的命令解释器和命令编程语言。

  Bourne shell曾作为管理系统的常用工具,是UNIX操作系统的标准shell。大部份的系统管理命令文件,例如 rc start、stop 与shutdown 都是Bourne shell 的命令档,且在单一使用者模式(single user mode)下以 root 签入时它常被系统管理者使用。Bourne shell因其简洁高效而闻名,它是由AT&T开发的。 Bourne shell 提示符号的默认值是 $。

 c shell

  c shell是一种比 Bourne Shell更适合的变种 Shell,使用的是“类C”语法,csh是具有C语言风格的一种shell,其内部命令有52个,较为庞大。

  C shell 是柏克莱大学(Berkeley)所开发的,且加入了一些新特性,如命令列历程(history)、别名(alias)、内建算术、档名完成(filename completion)、和工作控制(job control)。对于常在交谈模式下执行 shell 的使用者而言,他们较喜爱使用 C shell;但对于系统管理者而言,则较偏好以 Bourne shell 来做命令档,因为 Bourne shell 命令档比 C shell 命令档来的简单及快速。C shell 提示符号的默认值是 %。

  korn shell

  korn shell是一个 Unix shell 。在20世纪80年代早期,David Korn在贝尔实验室编写了它。它完全向上兼容 Bourne shell 并包含了 C shell 的很多特性,例如贝尔实验室用户需要的命令编辑。

  Korn shell 是Bourne shell 的超集(superset),由 AT&T 的 David Korn 所开发。它增加了一些特色,比 C shell 更为先进。Korn shell 的特色包括了可编辑的历程、别名、函式、正规表达式万用字符(regular expression wildcard)、内建算术、工作控制(job control)、共作处理(coprocessing)、和特殊的除错功能。Bourne shell 几乎和 Korn shell 完全向上兼容(upward compatible),所以在 Bourne shell 下开发的程序仍能在 Korn shell 上执行。Korn shell 提示符号的默认值也是 $。在 Linux 系统使用的 Korn shell 叫做 pdksh,它是指 Public Domain Korn Shell。

        在日常使用中,大多数Linux用户会使用Bash,因为它在Linux系统中普遍存在,具有广泛的支持和资源。然而,了解其他Shell也可以为特定的任务和需求提供更多选择。根据具体情况,用户可以切换Shell来执行不同的任务,或者编写特定于Shell的脚本来实现自定义功能。


 

if else语句

        在Linux中,`if`语句是用于条件判断和逻辑控制的关键部分。以下是`if`语句的基本语法,包括`if`、`if else`和`if elif else`的示例:

 基本的if语法

语法形式: 

if [ condition ]; then
    # 如果条件为真,则执行以下代码块
    # 可以包含一个或多个命令
fi

示例:

if [ -f file.txt ]; 
then
    echo "file.txt 存在。"
fi

if else语法 

if [ condition ]; then
    # 如果条件为真,则执行以下代码块
else
    # 如果条件为假,则执行以下代码块
fi 

示例:

if [ -f file.txt ]; 
then
    echo "file.txt 存在。"
else
    echo "file.txt 不存在。"
fi

if elif else语法

if [ condition1 ]; then
    # 如果条件1为真,则执行以下代码块
elif [ condition2 ]; then
    # 如果条件2为真,则执行以下代码块
else
    # 如果前面的条件都为假,则执行以下代码块
fi

示例:

if [ -d directory ]; then
    echo "directory 存在且是一个目录。"
elif [ -f file ]; then
    echo "file 存在且是一个文件。"
else
    echo "directory 和 file 都不存在。"
fi


         在这些语法中,`[ condition ]`用于表示条件测试,根据条件的真假执行不同的代码块。您可以根据具体的需求嵌套`if`语句来进行更复杂的逻辑控制。

注意:

(())是一种数学计算命令,它除了可以进行最基本的加减乘除运算,还可以进行大于、小于、等于等关系运算,以及与、或、非逻辑运算。当 a 和 b 相等时,(( a==b ))判断条件成立,进入 if,执行 then 后边的 echo 语句。更多关于(())的介绍,可参考Linux Shell - 运算符。

if条件判断句的退出状态

            在Linux中,命令的退出状态是一个整数值,通常被称为退出码(Exit Code)或退出状态码(Exit Status)。这个退出状态用于表示命令的执行结果,通常遵循以下规则:

- 退出状态为0表示成功执行。
- 非零退出状态表示命令执行失败或出现问题。

        通常,非零退出状态可以用来指示命令的特定错误类型或问题。不同的命令可能使用不同的非零退出状态来表示不同的错误条件。例如,像您提到的`diff`命令,返回0表示没有差异,返回1表示找到差异,返回2表示出现无效文件名等。

在Shell脚本中,您可以使用特殊变量`$?`来获取上一个命令的退出状态。以下是一个示例:

```bash
#!/bin/bash

ls /nonexistent_directory  # 运行一个不存在的命令
if [ $? -eq 0 ]; then
  echo "Command executed successfully"
else
  echo "Command failed with exit status $?"
fi
```

        在上面的示例中,`ls /nonexistent_directory`命令会失败,因为指定的目录不存在。`$?`用于获取上一个命令的退出状态,然后通过条件判断来输出相应的消息。通过检查命令的退出状态,Shell脚本可以根据命令的执行结果采取不同的操作,使脚本更具弹性和鲁棒性。

退出状态和逻辑运算符的组合

        Shell的if语句可以使用逻辑运算符来组合多个命令的退出状态,以便进行多个条件的判断。常见的逻辑运算符有&&(逻辑与)、||(逻辑或)和!(逻辑非)。以下是一些示例:

运算符

使用格式

说明

&& 或 -a

条件1 && 条件2

逻辑与运算符,当 条件1 和 条件2 同时成立时,整个表达式才成立。 如果检测到条件1 的退出状态为 0,就不会再检测 条件2 了,因为不管条件2 的退出状态是什么,整个表达式必然都是不成立的,检测了也是多此一举。

|| 或 -o

条件1 || 条件2

逻辑或运算符,条件1 和 条件2 两个表达式中只要有一个成立,整个表达式就成立。 如果检测到 条件1 的退出状态为 1,就不会再检测 条件2 了,因为不管 条件2 的退出状态是什么,整个表达式必然都是成立的,检测了也是多此一举。

!

!条件

逻辑非运算符,相当于”取反“的效果。如果 条件成立,那么整个表达式就不成立;如果 条件 不成立,那么整个表达式就成立。

 具体代码:


if [ -f file1 ] && [ -f file2 ];
then
  echo "Both file1 and file2 exist."
fi

if [ -d directory1 ] || [ -d directory2 ]; 
then
  echo "At least one of directory1 or directory2 exists."
fi

if ! [ -e file1 ];
then
  echo "file1 does not exist."
fi

while语句

        `while`语句在Linux中用于循环执行一系列命令,可以用来创建不定次数的循环。以下是`while`语句的基本语法,包括一个简单的示例:

 while [ condition ]
do
    # 在条件为真时执行以下命令
done 

注意:condition`是一个测试条件,当条件为真时,`do`和`done`之间的命令会被执行。当`condition`的值为假时,循环结束,脚本继续执行后续的命令。

#!/bin/bash

count=0

while [ $count -lt 5 ]
do
    echo "Hello, World"
    count=$((count + 1))
done

        使用`break`语句来在循环中提前退出循环,或者使用其他条件来控制循环的终止条件,以满足不同的需求。

until语句

        until语句是Shell中的另一种循环控制结构,与while循环相反,它会一直循环直到条件为真。当条件为假(返回值为1,代表false)时,until循环会继续执行,而当条件为真时,循环终止。

以下是until语句的基本语法和示例:

until [ condition ]
do
    # 在条件为假时执行以下命令
done
 

示例:指定输出多少次hello world

 

#!/bin/bash

count=0

until [ $count -ge 5 ]
do
    echo "Hello, World"
    count=$((count + 1))
done

for语句

与其他编程语言类似,Shell同样支持for循环,允许您=在指定范围内或一组项目上进行迭代。

循环方式一:在指定的一组项目上进行迭代 

语法形式:

for var in item1 item2 ... itemN
do
    # 在每个项目上执行命令
done
注意:var是循环变量,item1 item2 ... itemN 是循环的范围。

示例:输出5次hello world

#!/bin/bash

for i in 1 2 3 4 5
do
    echo "Hello, World"
done

循环方式二:在指定的整数范围内进行迭代 

语法形式:

for ((start; end; step))
do
    # 在指定范围内执行命令
done
注意:start表示循环范围的起始值,必须为整数end表示循环范围的结束值,必须为整数

示例:循环1到5并打印

#!/bin/bash

for ((i=1; i<=5; i++))
do
    echo $i
done

循环方式三:在不同的用法中,可以使用通配符来表示一组项目

无限循环语法:

for var in {item1,item2,...,itemN}
do
    # 在每个项目上执行命令
done

示例:打印5次hello world

#!/bin/bash

for i in {1,2,3,4,5}
do
    echo "Hello, World"
done

select语句

        select语句是Shell的一种特殊循环,用于创建交互式菜单,用户可以从菜单中选择一个编号并执行相应的操作,增强交互性。select语句通常与case语句一起使用,以根据用户的选择执行不同的命令。 select in 是 Shell 独有的一种循环,非常适合终端(Terminal)这样的交互场景,而其他语言则没有。以下是select语句的基本语法和示例。

        注意:select 是无限循环(死循环),输入空值,或者输入的值无效都不会结束循环,只有遇到 break 语句,或者按下 Ctrl+D 组合键才能结束循环。 执行命令过程中,终端会输出 #? 代表可以输入选择的菜单编号。

基础语法:

select var in item1 item2 ... itemN
do
    # 显示菜单并等待用户选择
    # 用户选择后,执行与选择相关的命令
done
注:

  • var是用户选择的编号。
  • item1item2 等是菜单中的选项。

示例1:

#!/bin/bash

select option in "Option 1" "Option 2" "Option 3" "Quit"
do
    case $option in
        "Option 1")
            echo "You chose Option 1"
            ;;
        "Option 2")
            echo "You chose Option 2"
            ;;
        "Option 3")
            echo "You chose Option 3"
            ;;
        "Quit")
            break
            ;;
        *)
            echo "Invalid option"
            ;;
    esac
done

 

 case语句

        Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令;当分支较多,并且判断条件比较简单时,使用 case in 语句就比较方便了。

        每一匹配模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至;;(类似break)。取值将检测匹配的每一个模式,一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。 caseinesac 都是 Shell 关键字, esac就是case的反写在这里代表结束case。

语法形式:

case value in
    pattern1)
        # 当value匹配pattern1时执行这里的命令
        ;;
    pattern2)
        # 当value匹配pattern2时执行这里的命令
        ;;
    pattern3)
        # 当value匹配pattern3时执行这里的命令
        ;;
    *)
        # 当value与上述模式都不匹配时执行这里的命令
        ;;
esac

注意:
value是要匹配的值。
pattern1、pattern2、pattern3 等是不同的模式,可以是数字、字符串,也可以包括通配符。
;; 表示模式匹配后,执行完命令后结束case语句。

匹配模式:可以是一个数字、一个字符串,甚至是一个简单正则表达式。简单正则表达式支持如下通配符:

格式

说明

*

表示任意字符串。

[abc]

表示 a、b、c 三个字符中的任意一个。比如,[15ZH] 表示 1、5、Z、H 四个字符中的任意一个。

[m-n]

表示从 m 到 n 的任意一个字符。比如,[0-9] 表示任意一个数字,[0-9a-zA-Z] 表示字母或数字。

|

表示多重选择,类似逻辑运算中的或运算。比如,abc | xyz 表示匹配字符串 “abc” 或者 “xyz”。

演示:文章来源地址https://www.toymoban.com/news/detail-739945.html

 #!/bin/bash

fruit="apple"

case $fruit in
    "apple")
        echo "It's an apple."
        ;;
    "banana")
        echo "It's a banana."
        ;;
    "cherry")
        echo "It's a cherry."
        ;;
    *)
        echo "It's something else."
        ;;
esac

到了这里,关于Linux -----------------------Shell &流程判断的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何判断linux 服务器是否是root权限

    您可以使用以下命令来判断当前Linux用户是否具有root权限: 如果输出为root,则表示当前用户是root用户,即具有root权限。 另外,您也可以使用以下命令来判断当前用户是否具有root权限: 如果当前用户具有sudo权限,则该命令不会输出任何内容。 如果当前用户没有sudo权限,则

    2024年02月11日
    浏览(59)
  • 【Linux 服务器运维】定时任务 crontab 详解 | 文末送书

    本文思维导图概述的主要内容: 1.1 什么是 crontab Crontab 是一个在 Unix 和 Linux 操作系统上 用于定时执行任务 的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。Crontab 是 cron table 的缩写, cron 指的是 Unix 系统中的一个后台进程,它

    2024年02月08日
    浏览(92)
  • Linux -----------------------Shell &流程判断

             Shell 是操作系统的用户界面,负责接收和解释用户的命令,并将这些命令转化为操作系统内部能够理解的指令,然后执行相应的操作。 Shell 还允许用户编写脚本,以自动化和批处理任务,从而提高效率。在Linux系统中,有多种不同的Shell可供选择,如Bash、Zsh、K

    2024年02月06日
    浏览(47)
  • 迁移Linux服务器用户数据(将一个服务器的Linux用户数据迁移到另一个Linux服务器用户的流程)

    先来到根目录,再使用tar命令打包数据: tar czvf root.zip.gz ./* 在根目录使用指令: scp 打包好的数据 用户@ip:目的用户下的某个目录 源Linux服务器用户 : 查看压缩包是否到达: 对收到的数据进行解压,使用指令 tar xzvf root.zip.gz 解压到当前目录下。 目的Linux服务器用户 : 看到

    2024年02月08日
    浏览(50)
  • shell脚本——服务器巡检(自动化运维)

     目的   自动 获取集群内 多个主机 的内存、磁盘、cpu等信息 生成日志  准备    VMware虚拟主机IP在同一个网段(互相能ping通)             虚拟主机都有公钥免登录            修改主机IP  vi/etc/sysconfig/netwoek-scripts/ifcfg-ens160            设置主机名 hostnamectl set-ho

    2024年02月15日
    浏览(55)
  • linux搭建web服务器流程

    本篇文章用于学习Linux搭建web服务器,创建个人博客站点实训。 您需要将其中的 ipaddress 替换为您的ECS服务器的公网IP地址。例如。 命令显示结果如下。 输入yes,然后输入云服务器的登录密码。 登录成功后会显示如下信息。 使用Apache作为后端服务器,并在云服务器上创建一

    2024年02月04日
    浏览(48)
  • Linux服务器常见运维性能测试(1)综合跑分unixbench、superbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月04日
    浏览(82)
  • Linux本地部署1Panel服务器运维管理面板并实现公网访问

    1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等 下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理界面 执行如下命令一键安装 1Panel: 安

    2024年02月04日
    浏览(98)
  • 【Linux】在服务器上创建Crontab(定时任务),自动执行shell脚本

    业务场景:该文即为上次编写shell脚本的姊妹篇,在上文基础上,将可执行的脚本通过linux的定时任务自动执行,节省人力物力,话不多说,开始操作! 连上服务器后,在任意位置都可以执行: crontab -e 如果没有进入 编辑cron任务模式 根据提示查看我们的服务器上是否未安装crontab没有则

    2024年02月14日
    浏览(60)
  • [1Panel]开源,现代化,新一代的 Linux 服务器运维管理面板

    本期测评试用一下1Panel这款面板。1Panel是国内飞致云旗下开源产品。整个界面简洁清爽,后端使用GO开发,前端使用VUE的Element-Plus作为UI框架,整个面板的管理都是基于docker的,想法很先进。官方还提供了视频的使用教程,本期为大家按照本专栏的基本内容进行多方面的测评。

    2024年02月07日
    浏览(94)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包