---------------------------------------------------------------------------------
變量是計算機內存的單元,其中存放的值可以改變。變量用於暫時保存信息。
一. 變量設置規則
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