【linux】shell變量——環境變量設置修改、用戶自定義變量、read等

一、變量

1.變量的命名規範

- 必須以字母或下劃線開頭,名字中間只能由字母、數字和下劃線組成
- 變量名稱長度不得超過255個字符
- 變量名稱在有效範圍內必須是唯一的
- 變量默認類型都是字符串(重點)

2. 變量分類

- 字符串
- 整數
- 浮點
- 日期

3. 用戶自定義變量

- 這些變量的值都是自己定義的
- 變量名不能以數字開頭
- 等號左右兩邊不能有空格(重點)

4. 定義變量

    name="yuhua"
    age=10

5. 輸出變量值

    echo $變量名

6. 值默認都是字符串

    x=1
    y=2
    z=3
    z=$x+$y+$z
    echo $z//結果是1+2+3,注意這裏的+也是字符串,可不是連接符

7. set

- 查詢系統中默認所有已經生效的變量,包括系統變量,也包括自定義變量
- set命令是用於查看所有變量的
    set | grep yuhua

8. unset

- 刪除變量
    unset a

9. 環境變量

- 環境變量是全局變量,而自定義變量是局部變量
- 自定義變量會在當前的shell中生效,而環境變量會在當前shell以及其子shell中生效
- 這種變量主要保存的是和系統操作環境相關的數據
- 變量可以自定義,但是對系統生效的環境變量名和變量作用是固定的
    bash //進入子shell
    pstree //查看進程樹
    exit //退出子shell,進入父shell中

10. 自定義環境變量

    export 變量名=變量值
    export evname=prod

11. env

- 僅僅用來查看環境變量,而看不到本地變量
    env

12. 常用環境變量

變量名 含義 示例
HOSTNAME 主機名 HOSTNAME=localhost
SHELL 當前的shell SHELL=/bin/bash
TERM 終端環境 TERM=xterm
HISTSIZE 歷史命令條數 HISTSIZE=1000
SSH_CLIENT 當前操作環境如果是用SSH連接的話,這裏會記錄客戶端IP SSH_CLIENT=192.168.1.100 57596 22
SSH_TTY SSH連接的終端 SSH_TTY=/dev/pts/1
USER 當前登錄的用戶 USER=root

13. path

- 系統搜索路徑
    echo $PATH
    /usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
- 如果想把一個自定義的腳本直接可以執行,有三種辦法:
    - 方法一:把這個文件拷貝到目標目錄下
    - 方法二:在環境變量的目錄中,設置軟鏈接,鏈接到需要執行的文件
    //假設在/root/yuhua下有一個yh.sh,現在需要實現執行yh.sh文件,可以用環境變量目錄中設置軟鏈接的方式,具體如下:
    //用echo $PATH查看環境變量目錄
    //進入環境變量的額目錄/usr/bin
    ln -s /root/yuhua/yh.sh yh.sh
    //這樣就可以直接使用yh.sh去執行yh.sh文件了
    - 方法三:把腳本所在目錄添加到環境變量中的PATH路徑中
    #!/bin/bash
    echo hello
    ./hello.sh
    /root/myshell/hello.sh
    export PATH="$PATH":/root/myshell   //臨時生效,這句話的意思就是將環境變量目錄增加一個/root/myshell,這樣執行hello.sh,如果找不到該文件,那麼就回去$PATH對應的環境變量目錄中去找,所以就會找到/root/myshell下的hello.sh
    hello.sh

14. $PS1

    # echo $PS1
    [\u@\h \W]\$
    root@localhost myshell]#
變量 提示符
\d 顯示日期,格式爲"星期 月 日"
\H 完整的主機名
\t 24小時制時間,格式爲 “HH:MM:SS”
\A 24小時制時間,格式爲 “HH:MM”
\u 顯示當前用戶名
\w 顯示所在目錄完整名稱
\W 顯示所在目錄的最後一個目錄
$ 提示符,root爲#,普通用戶爲$
    export PS1='[\u@\h \w]\$ '

15. 語系環境變量

- 查詢當前系統語系
- 在Linux中通過locale來設置程序運行的不同語言環境,locale由ANSI C提供支持。locale的命名規則爲<語言>_<地區>.<字符集編碼>,如zh_CN.UTF-8,zh代表中文,CN代表大陸地區,UTF-8表示字符集
- LANG:定義系統主語系的變量
    locale//查看語言體系
    LANG=zh_CN.UTF-8//修改語言

    echo $LANG//當前設置的語言
    //以上是臨時修改

    //以下是永久修改
    vi /etc/sysconfig/i18n //進去後把LANG的值改了就可以了

16.中文支持

- 圖形界面可以支持中文
- 第三方工具比如xshell語系設置正確可以支持中文
- 虛擬機中純字符界面不支持中文
    - 爲啥xshell這些終端可以支持中文,比如創建中文名字的文件,那是因爲xshell這個終端去實現了,但是真正進入虛擬機的字符界面,在xshell裏創建的中文名字的文件,名字就成了亂碼

17. 位置參數變量

- 這種變量主要是用來向腳本當中傳遞參數或數據的,變量名不能自定義,變量作用是固定的
位置參數變量 作用
$n n爲數字,$0代表命令本身,$1-91910,9代表第1到第9個參數,10以上的參數需要用大括號包含,如{10}
$* 這個變量代表命令中所有的參數,$*把所有的變看數看成一個整體
$@ 這個變量也代表命令行中所有的參數,不過$@把每個參數進行區分
$# 這個變量代表命令行中所有參數的個數
//創建 sum.sh ,內容如下:
#!/bin/bash
num1=$1 //表示傳入的第一個參數
num2=$2 //表示傳入的第二個參數
sum=$((num1+num2)) //$(())表示運算
echo $sum
//執行sum.sh,並且傳入參數
sh sum.sh 2 4 //後面傳的2和4都是參數,分別對應$1和$2
//輸出6

//如果想知道執行過程,可以切換到調試模式,加操作符-x
sh -x sum.sh 2 4
//假設文件yh.sh的內容如下:
#!/bin/bash
echo "$@"
echo "$*"
for i in "$@"
do
echo "i=$i"
done

//然後執行這個文件,
sh yh.sh 2 3 4 5
//echo "$@"會打印出 2 3 4 5,每個參數都是獨立項
//echo "$*"會打印出‘2 3 4 5’,所有參數是一項
//for循環打印出:
    //i=2
    //i=3
    //i=4
    //i=5
    //求輸入參數的和
    #!/bin/bash
    sum=0
    for i in "$@"
        do
            sum=$(($sum+$i))
        done
    echo "sum=$sum"
    //執行
    sh sum.sh 1 2 3 4 5

18. 預定義變量

- 是腳本中已經定義好的變量,變量名不能自定義,變量作用也是固定的
位置參數變量 作用
$? 最後一次執行的命令的返回狀態。0表示正確執行,非0表示不正確執行
$$ 當前進程的進程號(PID)
$! 後臺運行的最後一個進程號(PID)
   ls && echo yes

19. read

- 用於讀取用戶的輸入信息
- read[選項][變量名]
選項 含義
-p 提示信息,在等待read輸入時,輸出提示信息
-t 秒數: read命令會一直等待用戶輸入,使用此選項可以指定等待時間
-n 字符數,read命令只接受指定的字符數,就會執行
-s 隱藏輸入的數據,適用於機密信息的 輸入
- 舉例:寫一個腳本,讓用戶輸入用戶名,性別,密碼
   #!/bin/bash
   read -p "請輸入您的用戶名:" -t 10 username //這句話的意思就是提示"請輸入您的用戶名:",最長等待用戶輸入的時間是10秒,輸入的內容存到變量username中
   echo -e "\n"
   read -p "請輸入您的性別[m/f]:" -n 1 gender //-n 1代表只能輸入一個字符,輸入1個字符後自動執行下一條命令,內容存到gender變量中
   echo -e "\n"
   read -p "請輸入密碼:" -s password //-s 表示用戶輸入不顯示
   echo -e "\n"
   echo -e "您輸入的信息爲:\r\n"
   echo -e "     用戶名爲:$username\r\n"
   echo -e "       性別爲:$gender\r\n"
   echo -e "       密碼爲:$password\r\n"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章