8: Bash 的變量和運算符linux
1:Bash變量與其餘編程語言的不一樣shell
(1)在 Bash 中,變量的默認類型都是字符串型,若是要進行數值運算,則必修指定變量類型爲數值型。編程
(2)變量用等號鏈接值,等號左右兩側不能有空格。bash
(3)變量的值若是有空格,須要使用單引號或雙引號包括。如:「test="hello world!"」。其中雙引號括起來的內容「$」、「\」和反引號都擁有特殊含義,而單引號括起來的內容都是普通字符。 在變量的值中,可使用「\」轉義符。 若是須要增長變量的值,那麼能夠進行變量值的疊加。不過變量須要用雙引號包含"$變量名dom
"或用${變量名}包含變量名ssh
2:變量的分類編程語言
用戶自定義變量:這種變量是最多見的變量,由用戶自由定義變量名和變量的值。命令行
環境變量:這種變量中主要保存的是和系統操做環境相關的數據,好比當前登陸用戶,用戶的家目錄,命令的提示符等。環境變量的變量名能夠自由定義,可是通常對系統起做用的環境變量的變量名是系統預先設定好的。進程
位置參數變量:這種變量主要是用來向腳本當中傳遞參數或數據的,變量名不能自定義,變量做用是固定的。ip
預約義變量:是 Bash 中已經定義好的變量,變量名不能自定義,變量做用也是固定的。
(1)自定義變量
用戶自定義變量:#等號左右兩側不能有空格
[root@localhost ~]# name=123
echo $name
變量的增刪改查:
增長 :name=123,
改:name=567直接覆蓋,
刪除:unset name 刪除變量,能夠理解爲釋放變量的內存空間
查詢:查看變量是否已經定義,或者系統定義了多少變量。
set 命令[選項]
選項:
-u: 若是設定此選項,調用未聲明變量時會報錯(默認無任何提示)
-x: 若是設定此選項,在命令執行以前,會把命令先輸出一次
(2)系統環境變量
1:環境變量設置
export age="18"
2: 環境變量查詢和刪除
env 命令和 set 命令的區別是,set 命令能夠查看全部變量,而 env 命令只能查看環境變量。
[root@localhost ~]# unset gender
[root@localhost ~]# env | grep gender
3:系統默認環境變量
HOSTNAME=localhost.localdomain 主機名
SHELL=/bin/bash 當前的 shell
TERM=linux 終端環境
HISTSIZE=1000 歷史命令條數
SSH_CLIENT=192.168.4.159 4824 22 當前操做環境是用 ssh 鏈接的,這裏記錄客戶端 ip
SSH_TTY=/dev/pts/1
例如:PATH="$PATH":/root/sh 修改系統bin執行路徑添加sh
4: LANG 語系變量
LANG 變量定義了 Linux 系統的主語系環境,這個變量的默認值是:
[root@localhost src]# echo $LANG
(3)位置參數變量
$n: n 爲數字,$0 表明命令自己,$1-$9 表明第一到第九個參數,十以上的參數須要用大括號包含,如${10}.
$* 這個變量表明命令行中全部的參數,$*把全部的參數當作一個總體.
$@ 這個變量也表明命令行中全部的參數,不過$@把每一個參數區分待
$# 這個變量表明命令行中全部參數的個數.
$1表示的是第一個參數,$0表示的是命令自己。
[root@localhost sh]# more parment.sh
#!/bin/bash
for i in $* #循環輸出
do
echo "The paramenters is : $i"
done
for y in "$@"
#一樣 in 後面的有幾個值,for 循環幾回,每次都把值賦予變量 y
#但是 Shell 中把「$@」中的每一個參數都當作是獨立的,因此「$@」中有幾個參數,就會循環幾回
do
echo "The parameter$x is: $y"
#輸出變量 y 的值
x=$(( $x +1 ))
#然變量 x 每次循環都加 1,爲了輸出時看的更清楚
done
(4)預約義變量:
$? 最後一次執行的命令的返回狀態。若是這個變量的值爲 0,證實上一個命令正確執行;若是這個變量的值爲非 0(具體是哪一個數,由命令本身來決定),則證實上一個命令執行不正確了。
$$ 當前進程的進程號(PID)
$! 後臺運行的最後一個進程的進程號(PID)
9: 接收鍵盤輸入
read [選項] [變量名]
選項:
-p 「提示信息」: 在等待 read 輸入時,輸出提示信息
-t 秒數: read 命令會一直等待用戶輸入,使用此選項能夠指定等待時間
-n 字符數: read 命令只接受指定的字符數,就會執行
-s:隱藏輸入的數據,適用於機密信息的輸入
變量名:變量名能夠自定義,若是不指定變量名,會把輸入保存入默認變量 REPLY。若是隻提供了一個變量名,則整個輸入行賦予該變量。若是提供了一個以上的變量名,則輸入行分爲若干字,一個接一個地賦予各個變量。