Bash脚本学习 - 条件句、数组、for循环,函数

2023-11-05

1. 条件测试

在这里插入图片描述

  • [ 和 ] 是一个用于执行条件测试的命令。它们必须用空格分隔开,并且在 [ 后面和 ] 前面必须有空格。
  • -eq 是一个比较运算符,表示等于(equal)。它用于比较两个值是否相等。

2. 条件句

在 ifelseifelse.sh 文件中,

#!/bin/bash

if [ ${1,,} = herbert ]; then
        echo "Oh, you're the boss here. Welcome!"
elif [ ${1,,} = help ]; then
        echo "Just enter your username, duh!"
else
        echo "I don't know who you are. But you're not the boss of me!"
fi

在这里插入图片描述

3. Case statement

在 admin.sh文件中,

#!/bin/bash

case ${1,,} in
        herbert | administrator)
                echo "Hello, you're the boss here!"
                ;;
        help)
                echo "Just enter your username!"
                ;;
        *)
                echo "Hello there. You're not the boss of me. Enter a valid username!"
esac

在这里插入图片描述

4. 数组

在这里插入图片描述

  • 这个例子展示了如何创建一个数组。
  • 如何打印数组的第一个元素。
  • 如何打印整个数组。
  • 如何打印数组某个位置的元素。

5. for 循环

for item in ${MY_FIRST_LIST[@]}; do echo -n $item | wc -c; done

输出为:
3
3
5
4
4

  • for item in ${MY_FIRST_LIST[@]}; do:这是一个for循环的开始,它将遍历名为MY_FIRST_LIST的数组中的所有元素。$item表示当前遍历到的数组元素。

  • echo -n $item:这部分命令用于打印(显示)当前数组元素的值,但-n选项表示不要在末尾添加换行符。这意味着它会把元素值输出在同一行。

  • |:这是管道符号,它将前一个命令的输出传递给后一个命令作为输入。

  • wc -c:这部分命令使用wc命令来统计字符数(字节数)。-c选项告诉wc只统计字符数,而不是单词数或行数。

  • “;”:这是命令分隔符,它用于将多个命令放在同一行。

  • done:这是for循环的结束标记,表示循环体的结束。

6. 函数

写一个显示计算机的运行时间和启动时间的脚本。

在firstfunction.sh中,

#!/bin/bash

showuptime(){
        local up=$(uptime -p | cut -c4-)
        local since=$(uptime -s)
        cat << EOF
-----
This machine has been up for ${up}
It has been running since ${since}
-----
EOF
}
showuptime

输出为:
在这里插入图片描述

  • uptime -p命令用于获取计算机的运行时间,然后使用cut -c4-命令将字符串的前三个字符(通常是"up ")去掉,以得到纯粹的运行时间。
  • uptime -s命令用于获取计算机的启动时间。
  • cat << EOF:这是一个Here Document结构,它用于创建一个包含多行文本的块。这里的EOF表示文本块的结束标记。
  • showuptime:这一行表示调用定义的showuptime函数。

7. 函数和位置自变量

在 functionposargu.sh 文件中,

#!/bin/bash

showname(){
        echo hello $1
}
showname Herbert

在这里插入图片描述

8. 函数和条件句

在 functionposargu.sh 文件中,

#!/bin/bash

showname(){
        echo hello $1
        if [ ${1,,} = herbert ]; then
                return 0
        else
                return 1
        fi
}
showname $1
if [ $? = 1 ]; then
        echo "Someone unknown called the function!"
fi
  • 条件句中,如果输入和位置变量为 herbert ,返回0;否则,返回1。
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash脚本学习 - 条件句、数组、for循环,函数 的相关文章

随机推荐

  • 各代iphone尺寸_iphone屏幕尺寸比例是多少,iphone各代屏幕尺寸大小介绍

    自2007年苹果发布第一代iPhone以来 到目前最新的iPhone XS XS Max 苹果累计发布了21款手机 涉及7款尺寸 8种分辨率 那么这么多的不同手机之间有什么内在联系吗 为什么在iPhone6代 8代之间 屏幕是4 7寸和5
  • python实现简单的百度搜索

    usr bin python coding utf 8 import urllib import urllib2 实现百度关键字查询的小例子 定义基础url url http www baidu com s 定义请求头信息 headers
  • 实现字符串倒叙

    var reverse function str 倒叙的函数 return str split reverse join split切割字符串然后转换为数组 reverse是jquery的倒序方法 然后join是将其放到字符串中 let a
  • 单极性PWM和双极性PWM

    单极性与双极性PWM模式 从调制脉冲的极性看 PWM又可分为单极性与双极性控制模式两种 单极性PWM模式 产生单极性PWM模式的基本原理如图6 2所示 首先由同极性的三角波载波信号ut 与调制信号ur 比较 图6 2 a 产生单极性的PWM
  • 漫画:什么是区块链?

    点击上方 程序员小灰 选择 置顶公众号 有趣有内涵的文章第一时间送达 什么是区块链 区块链 英文 Blockchain 本质上是一种去中心化的分布式数据库 任何人只要架设自己的服务器 接入区块链网络 都可以成为这个庞大网络的一个节点 区块链
  • WScript.CreateObject(WScript.Shell)

    为什么 WScript CreateObject WScript Shell 无法执行 源 VBS 程序 Dim t Set t WScript CreateObject WScript Shell Set t Nothing WScrip
  • MySQL text类型的最大长度

    MySQL 3种text类型的最大长度如下 TEXT 65 535 bytes 64kb MEDIUMTEXT 16 777 215 bytes 16Mb LONGTEXT 4 294 967 295 bytes 4Gb 参考 http w
  • cmake的macro

    一 定义 可以把它理解为C 的宏 命令如下 macro
  • The connection to adb is down, and a severe error has occured.

    报错 The connection to adb is down and a severe error has occured 解决 cmd跳到sdk tools文件路径下 adb kill server 然后再adb start serv
  • Kotlin_读写文件

    读写文件操作记录 提取成函数 方便看其返回值 以加深理解 private fun createNewFile File var file File output txt if file exists file delete file cre
  • MES :制造执行系统 (Manufacturing Execution System)

    MES是美国管理界90年代提出的新概念 美国先进制造研究机构AMR Advanced Manufacturing Research 通过对大量企业的调查发现现有的企业生产管理系统普遍由以ERP MRPII为代表的企业管理软件 以SCADA
  • 在gitlab中生成增量代码质量分析报告

    作为管理者 你是否想在组员创建merge request时 生成代码质量分析报告 今天它来了 gitlab ci yml image python 3 11 flake8 allow failure true rules 只有flake8任
  • centos等重新编译rpm包笔记备忘

    源码包获取 直接浏览器下载或者添加source源后 直接 yumdownloader source kernel 或者dnf命令 源码包编译依赖包安装 编译之前还需要补齐编译这个包需要的依赖 当然可以rpmbuild命令提示后一个一个补 网
  • STM32中如何用systick中断来监控系统的运行时间

    define SysTick CTRL TICKINT Pos 1U define SysTick CTRL TICKINT Msk 1UL lt lt SysTick CTRL TICKINT Pos define DRV SYS TIC
  • 关于批量添加用户和域用户

    首先看批量添加用户 有三种方法 1 开始 运行 CMD 输入 for l i in 1 1 50 do net user test i 123456 add 注 1 1 50 的意思是 开始值 递增量 终值 如果想递减 50 1 1 tes
  • pycharm专业版许可证申请(特定人群)

    来到官网 PyCharm the Python IDE for Professional Developers by JetBrains 翻译一下 我是学生党 所以选择第一个 选择官方文件 这里需要学信网在新验证 学信网官网在此 中国高等教
  • webpack 如何自定义loader

    webpack中loader本质就是函数 其中前一个loader处理完代码后 交给后一个代码继续处理 最终经过多个loader的处理后 源代码变成最终代码 自定义loader其实就是自己写一个函数 在把函数导出 写在rule中即可 如图所示
  • twitter_充分利用Twitter的12种方法

    twitter There is no doubt that Twitter has been one of the hottest new web applications of the past couple of years Sinc
  • QT类的构造函数和析构函数在main函数中被引用

    问题描述 原有头文件a h 源文件a cpp main中调用a中的类A 新建头文件b h 源文件b cpp 将原来调用类A改为b中的类B 直接运行报错LNK2019 类B中的构造函数和析构函数在main函数中被引用 项目清除后重新构建依旧无
  • Bash脚本学习 - 条件句、数组、for循环,函数

    1 条件测试 和 是一个用于执行条件测试的命令 它们必须用空格分隔开 并且在 后面和 前面必须有空格 eq 是一个比较运算符 表示等于 equal 它用于比较两个值是否相等 2 条件句 在 ifelseifelse sh 文件中 bin b