zoukankan      html  css  js  c++  java
  • [Shell]Bash变量:自定义变量 & 环境变量 & 位置参数变量 & 预定义变量

    ---------------------------------------------------------------------------------

    变量是计算机内存的单元,其中存放的值可以改变。变量用于暂时保存信息。

    一. 变量设置规则

    1.数字,字母,下划线组成,不能以数字开头。

    2.Bash中变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。

    3.变量用等号连接值,等号左右不能有空格。

    4.变量的值如果有空格,需要使用单引号或双引号包括,因为空格代表分割符。

     name="chen wei"

    5.在变量的值中,可以使用""转义符。

    6.如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含"$变量名" 或 ${变量名} 包含。

    7.如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。

      name=`ls` 或 name=$(ls)

      echo $name

    8.环境变量名建议大写,便于区分。

    二. 变量分类

    1. 用户自定义变量(也叫本地变量):只在当前的shell中生效。

    2. 环境变量:变量中保存的是和系统操作环境相关的数据。(值无法更改,可以新建)

      环境变量会在当前shell和这个shell的所有子shell当中生效,如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。

    3. 位置参数变量:用来向脚本当中传递参数或数据,变量名不能自定义,变量作用是固定的。(名称不能自定义,不能新建,只能改值)

    4. 预定义变量:Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。(名称不能自定义,不能新建,只能改值)

    【1】本地变量 

      name=chenwei               # 变量赋值

      echo $name                 # 变量调用(chenwei)

      name="$name"is          # 变量叠加

      echo $name               # 变量调用(chenweiis)

      name=${name}poet    # 变量叠加

      echo $name           # 变量调用(chenweiispoet)

      set                          # 查看所有变量

      unset name             # 变量删除

    【2】环境变量

      export name=farwish  # 声明环境变量

      env           # 查询环境变量

      unset name       # 删除变量

      系统常见环境变量:

      PATH:冒号分割的路径(系统查找命令的路径),可以使用 echo $PATH 查看

        ( 系统命令之所以不需要指定路径,是因为系统会去 PATH 定义的路径里面顺序查找,找不到才会提示不存在. )

      

        如果我们自己编写个脚本vim hello.sh; chmod 755 hello.sh; cp hello.sh /usr/local/bin;放入到$PATH中存在目录内,在任意位置输入hello.sh就可以执行了。(但是实际中不这样做,容易让人误解为是系统命令)

        PATH="$PATH":/home/weichen/test    # PATH变量叠加,把我们的脚本所在路径加进去(命令行修改只是临时生效,重启将失效)

          PATH=$PATH:/home/weichen/test  ( 环境变量也可以不加引号 )

      PS1:定义系统提示符的变量

        echo $PS1  # 输出为 [u@h W]$

        PS1='h:W u$'  # 设置成自定义的(仅临时生效)

         d :显示日期,格式为“星期 月 日”

         h :显示简写主机名。如默认主机名“localhost”

           :显示24小时制时间,格式为“HH:MM:SS”

         T :显示12小时制时间,格式为“HH:MM:SS”

         A :显示24小时制时间,格式为“HH:MM”

         u :显示当前用户名

         w :显示当前所在目录的完整名称

         W :显示当前所在目录的最后一个目录

         # :执行的第几个命令

         $ :提示符,如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”

    【3】位置参数变量

      $n :n为数字,$0代表命令本身,$1-$9 代表第一个到第九个参数,十以上的参数需要用大括号包含,如 ${10} 、${11}

      $* :这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体(如果循环 $* 输出参数,将只输出一次)

      $@ :这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待(如果循环 $@ 输出参数,将单独输出每个参数)

      $# :这个变量代表命令行中所有参数的个数

    #!/bin/bash
    # 注释:pam.sh
    echo $0
    echo $1
    echo $2
    echo $3
    echo $*
    echo $@
    echo $#

      chmod 755 pam.sh

      ./pam.sh abc def hhh

      # 输出:

       ./pam.sh

        abc

        def

        hhh

        abc def hhh

        abc def hhh

        3

      位置参数使用:

    #!/bin/bash
    # 注释:使用位置参数变量进行数值运算
    
    num1=$1
    num2=$2
    sum=$(( $sum1 + $sum2 ))    # 变量sum的和是num1+num2, $((  ))用于运算; 
                     # 或者直接 sum=$(( $1 + $2 ))
    echo $sum

    【4】预定义变量:

      $? :(echo $?)最后一次执行的命令返回的状态。值为0,证明上一个命令正确执行;如果非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。程序判断命令是否正确执行,只能依赖$?

      $$ :当前进程的进程号(PID)

      $! :后台运行的最后一个进程的进程号(PID)

    #!/bin/bash
    
    echo "当前进程号$$"
    
    find /usr -name hello.sh &
    
    echo "后台运行的最后一个进程的进程号$!"

      接收键盘输入:read [选项] [变量名]

        选项:

            -p "提示信息"     :    在等待read输入时,输出提示信息

            -t 秒数        :    read命令会一直等待用户输入,使用此选项可以指定等待时间

            -n 字符数    :    read命名只接收指定的字符数就会执行

            -s        :    隐藏输入的数据,适用于机密的信息输入 

            -t 和 -p 是必须使用的,-n 和 -s 可选,比用位置参数变量更直观。

    #!/bin/bash
    
    read -t 30 -p 'please input your name: ' name
    echo $name
    
    read -t 30 -s -p 'please input your password: ' passwd
    echo '
    '
    echo $passwd
    
    read -t 30 -n 1 -p 'please select your sex [M/F]: ' sex 
    echo '
    '
    echo $sex

    Link:http://www.cnblogs.com/farwish/p/3923622.html

  • 相关阅读:
    调用webservice接口报错
    Java设计模式之使用反序列化的方式实现单例模式
    Java设计模式之使用枚举类的方式创建单例
    使用饿汉模式创建单例模式
    Java 查看运行生成的字节码文件 反汇编
    Java设计模式之--单例模式-使用懒汉模式创建
    git无法 cherry pick到其他分支
    Android之Handler用法总结
    Java之观察者模式
    Android之Activity与Service通信
  • 原文地址:https://www.cnblogs.com/farwish/p/3923622.html
Copyright © 2011-2022 走看看