一、變量
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-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"