[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”

     \t  :顯示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 '\n'
echo $passwd

read -t 30 -n 1 -p 'please select your sex [M/F]: ' sex 
echo '\n'
echo $sex

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM