首页 > 系统相关 >shell的简单编写

shell的简单编写

时间:2024-09-07 18:24:47浏览次数:13  
标签:arr shell name 简单 echo 数组 fi 字符串 编写

shebang 行

shell脚本的第一行是#!/bin/bash/bin/bash是我们用来解释该脚本的shell的路径,这里是用bash,也可以替换成其他的

注释

# 这是一个注释

# 开头表示该符号右侧是注释

变量

  • 变量赋值

    在shell中,变量都是以字符串形式存储的,数字字符串会在进行算术运算时自动转换

      # 不能用空格分隔
      name="hello"
      age=1
    
  • 获取变量值

    在shell中,使用 $ 符号获取变量值

      echo "${name}" # 输出 "hello"
      echo "$name"   # 输出 "hello"
    

测试条件

  • 字符串的比较

    • = :判断两个字符串是否相等
      [ "$str1" = "$str2" ]

    • != :判断两个字符串是否不等
      [ "$str1" != "$str2" ]

  • 数值的比较

  • -eq : 等于
    [ "$num1" -eq "$num2" ]

  • -ne : 不等于
    [ "$num1" -ne "$num2" ]

  • -lt : 小于
    [ "$num1" -lt "$num2" ]

  • -le : 小于或等于
    [ "$num1" -le "$num2" ]

  • -gt : 大于
    [ "$num1" -gt "$num2" ]

  • -ge : 大于或等于
    [ "$num1" -ge "$num2" ]

条件判断

  • if语句
      if [ condition ]; then
        commands
      fi
    
  • if-else语句
      if [ condition ]; then
        commands
      else
        commands
      fi
    

循环结构

  • for循环
      for var in list; do
        commands
      done
    
  • while循环
      while [ condition ]; do
        commands
      done
    

输入和输出

  • read命令: 从标准输入读取数据到变量中
    read variable

  • echo命令: 向标准输出打印文本
    echo "Hello, World!"

文件(夹)操作:

  • 文件夹操作

    • 创建文件夹
      mkdir directory_name

    • 删除空文件夹
      rmdir directory_name

    • 删除非空文件夹
      rm -r directory_name

  • 文件操作

    • 创建文件
      touch file_name

    • 删除文件
      rm file_name

命令替换:$(command) 执行命令并将其输出作为变量值

  • 示例:
      current_date=$(date)
      echo "Current date and time: $current_date"
    

错误处理:

  • 通过检查最后一个命令的退出状态($?)来处理错误
      command
      if [ $? -ne 0 ]; then
        echo "Command failed"
      fi
    

扩展

  • 定义数组

    • 定义数组并赋值
      arr=(apple banana cherry)

    • 定义空数组并逐个赋值

      arr=()       # 定义一个空数组
      arr+=("apple")
      arr+=("banana")
      arr+=("cherry")
    
    • 使用索引定义数组
      arr=() # 可写可不写
    
      arr[0]="apple"
      arr[1]="banana"
      arr[2]="cherry"
    
  • 访问数组

      #!/bin/bash
    
      # 定义一个数组
      fruits=(apple banana cherry)
    
      # 访问数组的元素
      echo "第一个水果是: ${fruits[0]}"
      echo "第二个水果是: ${fruits[1]}"
      echo "第三个水果是: ${fruits[2]}"
    
      # 输出所有数组元素
      echo "所有水果: ${fruits[@]}"
    
  • 获取字符串长度

      # 定义一个字符串
      str="Hello, world!"
    
      # 获取字符串的长度
      length=${#str}
      echo "字符串长度: $length"
    
  • 获取数组长度

      # 定义一个数组
      arr=(apple banana cherry)
    
      # 获取数组的长度(即元素的数量)
      length=${#arr[@]}
      echo "数组长度: $length"
    
  • 获取命令行参数

      #!/bin/bash
      # 命令行中的执行:sh ./script.sh arg1 arg2 
      echo "第一个参数: $1" # 输出arg1的名称
      echo "第二个参数: $2" # 输出arg2的名称
      echo "所有参数: $@"
      echo "参数数量: $#"
    
  • 列表的生成

    • 使用花括号扩展:
      # {1..5} 生成 1 2 3 4 5
      # {a..c} 生成 a b c
      # {A..C} 生成 A B C
      for i in {1..5}; do 
        echo $i
      done
    
    • 通过数组:
      arr=(apple banana cherry)
      for fruit in "${arr[@]}"; do
        echo $fruit
      done
    
  • [ ] 是标准的测试命令,用于简单比较

      # 单个测试条件
      if [ "$a" = "$b" ]; then
        echo "Equal"
      fi
    
      # 多个测试条件
      # 与 &&
      if [ "$a" -gt 10 ] && [ "$b" -lt 20 ]; then
        echo "条件都满足"
      fi
      # 或 ||
      if [ "$a" -eq 0 ] || [ "$b" -eq 0 ]; then
        echo "至少一个条件满足"
      fi
    
  • [[ ]] 是 Bash 扩展,支持更复杂的条件测试

      # 单个测试条件
      if [[ "$a" = "$b" ]]; then
        echo "Equal"
      fi
      # 多个测试条件
      if [[ "$a" == "hello" && "$b" =~ ^[0-9]+$ ]]; then
        echo "Match"
      fi
    
  • ( ) 用于创建子 Shell,运行括号内的命令在子 Shell 中

      (cd /tmp; ls)  # 在子 Shell 中执行 cd 命令,不影响当前 Shell
    
  • (( )) 用于算术运算,支持更复杂的数学表达式

      ((sum = 5 + 10))
      echo $sum  # 输出 15
    
      # 也可以进行数学比较,使用的是数学符号
      if (( a > 10 && b < 20 )); then
        echo "条件都满足"
      fi
    
      if (( a == 0 || b == 0 )); then
        echo "至少一个条件满足"
      fi
    
  • $(( )) 是算术扩展,用于计算表达式并返回结果

      a=5
      b=10
      sum=$((a + b))
      echo $sum  # 输出 15
    

标签:arr,shell,name,简单,echo,数组,fi,字符串,编写
From: https://www.cnblogs.com/winter-z/p/18401925

相关文章

  • 简单谈谈方法重载和方法重写(编译时多态和运行时多态)
    这篇文章来聊一聊方法重载和重写到底是有什么区别,重载实现的是编译时多态,而方法重写实现的是运行时多态,那什么又是编译时多态和运行时多态呢?定义一个Animal类,publicclassAnimal{publicvoidsay(intage){System.out.println("我的年龄是"+age);}......
  • Anaconda安装教程,超详细超简单(2024最新版)
     本文讲解的是Anaconda安装教程、anaconda、怎么安装anaconda、Anaconda下载。扫盲:先装Python还是先装anaconda?关于先装Python还是先装Anaconda,这主要取决于你的具体需求和使用场景。不过,对于大多数初学者和数据分析、机器学习、科学计算等领域的使用者来说,推荐先安装Ana......
  • Makefile和CMkeLists.txt的简单编写
    MakefileCXX=g++#编译器TARGET=out#最终输出的文件名#如果有新增源文件,需手动添加同名的中间文件OBJ=main.osrc1.osrc2.o#要生成的中间文件(汇编文件),还未链接#也可以使用下面这种方法,这样我们就不要手动添加新增的源文件了#SRC=$(wildcard*.cpp)#......
  • 表单项标签简单学习
    目录 1.单选框radio​编辑​编辑​编辑​编辑2.复选框checkbox ​编辑​编辑​编辑3.隐藏域hidden4.多行文本框textarea​编辑​编辑5.下拉框select​编辑​编辑6.选择头像​编辑​编辑<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF......
  • 表单标签简单了解
    目录1.表单标签form2.演示3.method提交方式3.1get 特点​编辑3.2post特点3.3总结1.表单标签form表单标签是html的重点知识;2.演示表单标签最外层的标签名为form标签;其中还需要用到表单项标签;因此,表单项标签一定要定义name属性,该属性用于明确提......
  • Linux shell编程学习笔记77:tar命令——快照 & 备份(下)
     0 前言在Linuxshell编程学习笔记76:tar命令——快照&备份(上)中我们研究了 tar命令 的功能、格式、选项说明。现在我们来实践一下。1 应用实例1.1 创建演示文件和目录我们使用echo 命令和输出重定向创建文件f1 和f2,使用mkdir命令创建目录d1[purpleendurer@bash~]e......
  • Linux shell编程学习笔记76:tar命令——快照 & 备份(上)
    0 前言提取系统快照和备份文件都是我们的日常工作。在Windows中,我们可以创建系统还原点,在需要的时候可以把系统还原回去。在Linux中,我们可以使用tar命令来实现。1tar命令的功能,帮助信息,格式,选项和参数说明1.1 tar命令的功能tar名字来自"tapearchive"(磁带归档),最初用于将文件......
  • shell_AWK 获取系统状态信息
    #!/bin/bash#定义巡检日志文件路径,所有日志将记录在此文件中LOG_FILE="/var/log/system_inspection.log"#定义一个函数,将消息输出到日志文件并同时显示在屏幕上log(){#使用`date`获取当前时间,并将消息格式化后追加到日志文件,同时输出到屏幕echo"$(dat......
  • Python爬取下载m3u8加密视频,原来这么简单!
    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。爬取视频的时候发现,现在的视频都是经过加密(m3u8),不再是mp4或者avi链接直接在网页显示,都是经过加密形成ts文件分段进行播放。今天就教大家如何通过python爬取下载m3u8加密......
  • AP3215 8-150V 外围简单 宽输入 电压降压BUCK 恒压恒流驱动器 POE、电动车、扭扭车、
    产品描述AP3215是一系列外围电路简洁的宽输入电压降压BUCK恒压恒流驱动器,适用于8-150V输入电压范围的DC-DC降压应用。AP3215输出电压通过FB管脚设置,输出电流通过CS电阻设置,外围简洁,具备高效率,低功耗,低纹波,优异的线性调整率和负载调整率等优点。支持输出线......