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

Linux|shell中的变量

安呀智数据坊 2025-01-04
24

点击蓝字

关注我们

注: 本文为安丫科技丢小九的原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。

在现代的系统管理和自动化任务中,Shell脚本扮演着不可或缺的角色。Shell脚本的灵活性和强大功能使其成为IT专业人员和开发者的首选工具。

在Shell脚本中,变量是存储和操作数据的基本单元,它们对于编写有效和可维护的脚本至关重要。

01

  变量的基本概念 

在Shell脚本中,变量是用来存储数据值的占位符。变量可以包含字符串、数字或命令的输出。变量通常以字母开头,可以包含字母、数字和下划线。

    --错误命名
    [root@localhost ~]# 1var=aaa
    bash: 1var=aaa: command not found...
    --正确命名
    [root@localhost ~]# var1=aaa
    [root@localhost ~]# [root@localhost ~]# 1var=aaa
    bash: [root@localhost: command not found...


    02

     变量的基本操作 

    1. 变量的声明和赋值

    在Shell脚本中,变量的声明和赋值非常简单,但需注意,变量名和等号之间不能有空格。


    ① 直接赋值

      [root@localhost ~]# ip1=1.1.1.1
      [root@localhost ~]# echo $ip1
      1.1.1.1


      ② 使用其他变量赋值

        [root@localhost ~]# ip1=1.1.1.1
        [root@localhost ~]# ip2=$ip1
        [root@localhost ~]# echo $ip2
        1.1.1.1


        ③ 使用双引号和单引号赋值

        双引号:弱引用,双引号里可以有变量,可以出现转义字符。

          num=5;echo "数字:$num" 


          单引号:强引用,单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的。

            num=5;echo '数字:$num'
            --输出结果
            数字:$num


            ④交互式赋值

              #!/bin/bash


              # 提示用户输入他们的名字,并将其赋值给变量name
              echo "请输入名字:"
              read name


              echo "Hello, $name!"


              # 提示用户输入年龄,并将其赋值给标量age
              read -p "请输入年龄:" age


              echo "年龄:$age"


              # 提示用户输入一个密码,并将其赋值给变量password
              echo "Enter a password (input will be hidden):"
              read -s password


              echo $password


              # 等待用户按下回车键
              read


              echo "结束"


              [root@localhost ~]# sh name.sh
              请输入名字:
              alice
              Hello, alice!
              请输入年龄:18
              年龄:18
              Enter a password (input will be hidden):
              1234567


              结束


              2. 变量的读取和输出

              读取变量值并在脚本中使用时,需要在变量名前加上美元符号($)。例如,$变量名 或 ${变量名}

                echo $num
                echo ${num}


                03

                 变量的类型 

                1. 自定义变量

                • 自定义局部变量

                在当前shell中设置的变量只对当前shell有效,在子shell中将不可访问。

                  [root@localhost ~]# vim var1.sh
                  #!/bin/bash
                  var1=aaa
                  echo $var1
                  ~
                  "var1.sh" 6L, 36C written
                  [root@localhost ~]#
                  [root@localhost ~]# sh var1.sh
                  aaa
                  [root@localhost ~]# echo $var1


                  [root@localhost ~]#


                  • 自定义环境变量

                  ①使用export命令创建的环境变量可以在子shell中被访问。

                    [root@localhost ~]# vim var2.sh 
                    #!/bin/bash
                    var1=aaa
                    echo $var1


                    echo $var2
                    ~
                    "var2.sh" 7L, 47C written
                    [root@localhost ~]# export var2=bbb
                    [root@localhost ~]# sh var2.sh
                    aaa
                    bbb


                    ②全局环境变量可以在所有shell会话中被访问,通常在系统的配置文件中设置。

                    • /etc/profile:为所有用户设置环境变量和shell配置。

                    • /etc/bashrc:为bash shell设置环境变量和shell配置。

                      [root@localhost ~]# vim etc/profile
                      export MY_TEST_VAR="Hello, World!"
                      [root@localhost ~]# source etc/profile
                      [root@localhost ~]# echo $MY_TEST_VAR
                      Hello, World!


                      --新建shell会话
                      [root@localhost ~]# echo $MY_TEST_VAR
                      Hello, World!


                      2. 系统环境变量

                      系统环境变量是由操作系统设置的变量,它们提供了关于系统环境的信息,使用env可以查看系统中所有的环境变量。

                        [root@localhost ~]# env
                        LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:
                        SSH_CONNECTION=192.168.64.1 8399 192.168.64.129 22
                        LANG=en_US.UTF-8
                        HISTCONTROL=ignoredups
                        HOSTNAME=localhost.localdomain
                        XDG_SESSION_ID=4
                        USER=root
                        SELINUX_ROLE_REQUESTED=
                        PWD=/root
                        SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
                        HOME=/root
                        SSH_CLIENT=192.168.64.1 8399 22
                        SELINUX_LEVEL_REQUESTED=
                        XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
                        MY_TEST_VAR=Hello, World!
                        SSH_TTY=/dev/pts/1
                        MAIL=/var/spool/mail/root
                        var2=bbb
                        TERM=vt100
                        SHELL=/bin/bash
                        SELINUX_USE_CURRENT_RANGE=
                        SHLVL=1
                        LOGNAME=root
                        DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
                        XDG_RUNTIME_DIR=/run/user/0
                        PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
                        HISTSIZE=1000
                        LESSOPEN=||/usr/bin/lesspipe.sh %s
                        _=/usr/bin/env


                        [root@localhost ~]# echo $HOME
                        /root


                        3.特殊环境

                        • $1:第一个参数

                        • $#:参数的个数

                        • $*:所有的参数

                        • $@:所有的参数

                        • $0:当前正在执行的脚本的名称

                        • $$:当前Shell进程的进程ID(PID)

                        • $!:上一个后台命令的PID

                        • $?:上一个命令的退出状态

                          [root@localhost ~]# vim t3.sh
                          #!/bin/bash


                          echo "第一个参数:$1"
                          echo "第三个参数:$3"
                          echo "第二个参数:$2"
                          echo "脚本名:$0"
                          echo "参数的个数:$#"
                          echo "所有的参数:$*"
                          echo "所有的参数:$@"
                          echo "当前Shell进程的进程ID:$$"
                          echo "上一个后台命令的PID:$!"
                          echo "上一个命令的退出状态:$?"


                          [root@localhost ~]# sh t3.sh aa bb cc dd
                          第一个参数:aa
                          第三个参数:cc
                          第二个参数:bb
                          脚本名:t3.sh
                          参数的个数:4
                          所有的参数:aa bb cc dd
                          所有的参数:aa bb cc dd
                          当前Shell进程的进程ID:12241
                          上一个后台命令的PID:
                          上一个命令的退出状态:0


                          写在最后


                          Shell脚本中的变量是构建高效、灵活和强大自动化工具的基石,它们使得脚本能够适应多变的工作环境,处理复杂的数据,并实现精准的系统管理,从而在快速变化的技术领域中保持竞争力和效率。


                          END

                          关键词回复(可见相应文章):

                          oracle、mysql、pg、postgresql、sql、性能优化、故障处理、数据迁移、备份恢复、版本升级、补丁管理、深度巡检、解决方案、架构设计......

                          小助手

                          有任何问题或疑问,欢迎加V进群探讨哦~

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

                          评论