暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Shell 脚本实践总结

老柴杂货铺 2025-03-19
89
Shell脚本是一种在Unix/Linux环境下运行的自动化工具,通过编写一系列命令实现复杂操作。以下是其核心内容和实践总结:

核心概念

1. 基础结构

Shell脚本以#!/bin/bash开头,指定解释器 。使用变量存储数据,格式如var=value,引用时加$符号 。

特殊变量

    #a.sh
    #!/bin/bash
    echo $1
    echo $2
    echo $3
    echo $0
    echo $#
    echo $@
    echo $*
    echo $?
    echo $$
    echo "finally"
    系统/环境变量
    系统预定义的变量,一般在/etc/profile 中进行定义。使用env查看所有系统变量。
    HOME :用户主目录 PATH 文件搜索路径。
    PWD :用户当前工作目录。
    PS1、PS2 :提示符。
    LOGNAME:指登录主机的用户名称;
    HOSTNAME :主机名字,也就是这个系统的名字。
    USER:指目前环境使用者的名称。
    等等…还有其他的系统变量。
    使用:export 变量名,把 变量变为全局变量。变为全局变量后,就可以在多个文件里使用该变量。在命令行,使用export声明为全局变量后,只对当前的命令窗口有效。
    如果要想始终有效可以直接将环境变量添加到bashrc中去。使用vi ~/.bashrc编辑,添加进入后,使用source ~/.bashrc刷新来使得文件生效。
    运算符
    数组
    (1)数组的定义
    方式1:a=(1 2 3 4 5) ,各个数据之间用空格隔开。
    方式2:a[0]=1; a[1]=2; a[2]=3
    方式3:a=([1]=1 [2]=2)
    (2)数组的引用
      a=(2 5 7 10)
      echo ${a[2]} #输出下标为 2 的数据
      echo ${#a[*]} #输出数组的长度
      echo ${a[@]:2} #截取下标从 2 到最后
      echo ${a[@]:1:2} #截取从下标 1 后面 2 个

      2. 输入输出

      输入:用read命令获取用户输入,例如read var 。

      输出:用echo或printf显示信息,如echo "Hello, $name"。

      重定向符

      管道 ‘ | ’

      管道操作符|用于连接左右两个命令,将|左边的命令执行结果(输出)作为|右边命令的输入。

      单双引号' '和" "的区别:

      单引号:消除所有字符的特殊意义。

      双引号:消除除了$、" " 、’ ’ 三种以外其它字符的特殊意义。

        a=10
        echo ${a}     #输出:10
        echo "${a}"   #输出:10
        echo '${a}'   #输出:${a}

        3. 条件判断

        if语句:执行条件判断,将if和then放在不同行,如同行放置,则 if 语句必须要;结束

        例如:

          if [ "$num" -gt 10 ]; then
            echo "Number is greater than 10"
          fi
          case语句:多分支选择,例如:
            case "$choice" in
              start) echo "Starting..." ;;
              stop) echo "Stopping..." ;;
              *) echo "Invalid option" ;;
            esac

            4.循环控制

            for循环:遍历列表,例如:

              for i in {1..5}; do
                echo $i
              done
              while循环:条件满足时重复执行,例如:
                while [ $count -lt 10 ]; do
                  echo $count
                  ((count++))
                done
                until 语句:
                  #!/bin/bash
                  myvar=0
                  until [ $myvar -eq 10 ]
                    do echo $myvar 
                    myvar=$(($myvar+1))
                  done
                  5. 函数定义

                  函数用于封装可重用代码块,例如:

                    greet() {
                      echo "Hello, $1!"
                    }
                    greet "World"
                    6.except脚本-自动交互
                    模拟用户输入来与命令交互, 根据命令的输出提示, 来执行相应的操作, 来实现自动化。安装except解释器:sudo yum install expect
                      # 设置变量
                      set user "HwHiAiUser"
                      set host "192.168.21.8"
                      set password "Mind@123"
                      #使用 spawn 启动 scp 命令,将文件 test 传输到远程主机的用户主目录。
                      spawn scp test$user@$host:~
                      # 处理密码提示
                      expect {
                        "password:" {
                          send "$password\r"
                          }
                        "yes/no" {
                          send "yes\r"
                          expect "password:" {
                            send "$password\r"
                            }
                          }
                        }
                        # 等待 scp 进程结束expect eof
                      最佳实践

                      1. 编写规范

                      Shebang(释伴)是Unix/Linux系统中用于指定脚本解释器的特殊符号行,以#!开头,后跟解释器路径,如:#!/bin/bash

                      注释:详细说明功能、参数及关键步骤 。

                      错误处理:检查命令返回值并提供有意义的错误提示 。

                      2. 可读性与维护性

                      使用小写字母和下划线命名变量,避免大写字母 。

                      添加注释和文档,便于他人理解 。

                      将逻辑拆分为模块化函数 。

                      3. 性能优化

                      避免不必要的子进程创建,例如使用变量替换 。

                      利用内置命令减少外部调用 。

                      AWK 全面解析:从基础到实战的文本处理指南

                      流式文本处理的利器:深入理解sed工具的使用

                      grep用法及示例

                      通过掌握这些基础语法和遵循最佳实践,你可以高效地编写出简洁、易维护且功能强大的Shell脚本。

                      Shell的终极哲学

                      -自动化一切:能写脚本的绝不手动操作。

                      -组合技为王:管道、重定向、工具链叠加使用。

                      -持续学习:每天掌握一个命令,一年后你就是终端之神!

                      文章转载自老柴杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论