變量的定義
- 變量即在程序運行過程中它的值是允許改變的量
- 變量是用一串固定的字符來標識不固定的值得一種方法
- 變量是一種使用方便的佔位符,用於引用計算機內存地址,該地址可以存儲 Script 運行時可更改的程序信息
- 在 Shell 中變量是不能永久保存在系統中的,必須在文件中聲明
變量的種類–在 Shell 腳本中
- 在 Shell 中變量分爲環境級變量、用戶級變量、系統級變量
- 環境級變量只在當前 Shell 中生效, Shell 關閉變量丟失
- 用戶級變量寫在用戶的 .bash_profile 配置文件中,只針對當前用戶生效
- 系統級變量寫在系統的 /etc/profile 或者 /etc/profile.d 中,對於所有用戶都生效
export
臨時全局系統變量
export a=1
echo $a
1
不聲明臨時全局系統變量
b=1
echo $b
切換用戶測試
1、 su student
echo $a
1
echo $b
無輸出
2、 su - student
echo $a
echo $b
兩次都無輸出
系統級全局變量配置
vim /etc/profile
編輯配置文件
cat /etc/profile | tail -n | head -n 1
a=1
添加 a=1
source /etc/profile
立即生效
echo $a
1
有輸出
切換用戶測試
1、su student
echo $a
1
有輸出
2、 su - student
echo $a
1
用戶級環境變量
只針對當前用戶生效,切換用戶即失效
vim ~/.bash_profile
cat ~/.bash_profile | tail -n 3 | head -n 1
PATH=$PATH:$HOME/bin:/mnt
添加 /mnt ,使 /mnt下面的文件修改爲全局文件
source ~/.bash_profile
a=1
設置變量
vim /mnt/test_a.sh
cat /mnt/test_a.sh | tail -n 1
echo $a
sh test_a.sh
1
正常情況下,未設置用戶級環境變量,腳本只能在當前目錄下執行
設置用戶級環境變量後,可以在任何路徑執行自定義文件
變量名稱的規範
變量名稱中通常包含大小寫字母、數字、下劃線(不是必須)
變量名稱格式
TEST_LINUX
Test_Linux
tesT_Linux
字符的轉譯及變量的聲明
\ 轉譯單個字符
““ 弱引用,批量轉譯 ”“ 中出現的字符或字符串
‘‘ 強引用,批量轉譯 ‘’ 中出現的字符或字符串
‘‘ 與 “” 兩者的區別在於, “” 不能轉譯 “”、"`"、"!"、"$"
${} 變量聲明
使用變量,輸出 *
號
a=*
echo $a
輸出當前目錄下全部文件
a=\*
添加轉譯符
echo $a
輸出當前目錄下全部文件(轉譯符未生效)
echo '$a'
使用強引用符
輸出爲 $a
echo "$a"
使用弱引用符
輸出爲
*
直接顯示 * 號
echo *
輸出當前目錄下全部文件
echo \*
使用轉譯符
輸出
*
echo ""
echo '’
直接顯示 !
號
echo "!"
echo '!'
直接顯示 ?
號
echo "?"
echo '?'
直接顯示 \
號
echo "\"
echo '\'
echo \
echo \\
echo "\\"
echo '\\'
實驗
1、自動創建用戶腳本
vim /mnt/create_users.sh
vim /mnt /userfile
cat /mnt/userfile
user1
user2
user3
cat /mnt/create_users.sh
腳本思路
首先判斷使用者身份是否 root 用戶(只有 root 用戶才能創建用戶)
身份正確,再判斷是否使用所要生成用戶名的文件
身份錯誤,提示使用 root 身份
身份正確,但沒有或者使用錯誤用戶名文件,提示使用正確用戶名文件
兩者判斷正確,開始創建用戶
在創建過程中,發現用戶已存在,提示用戶已存在
測試腳本
sh create_users.sh
未使用用戶名文件,報錯,提示使用用戶名文件
sh create_users.sh 12
報錯,12 文件不存在
sh create_users.sh /mnt/userfile
正確,提示已創建所需要的用戶
sh create_users.sh /mnt/userfile
再次創建,提示已存在用戶
userdel user1
userdel user2
userdel user3
刪除剛創建的用戶
useradd user2
sh create_users.sh /mnt/userfile
提示 user1 建立
提示 user2 已存在
提示 user3 建立
使用
student
身份 執行腳本提示錯誤
2、創建、刪除系統用戶腳本
vim userctrl.sh
腳本思路
首先判斷 “-c” 創建 、 “-d” 刪除
如果不是 “-c” 或 “-d” 命令時,報錯,提示只有 “-c” 或 “-d” 兩個命令
當使用 “-c” 命令時,彈出對話框輸入用戶名,再次彈出對話框輸入用戶密碼
當用戶存在時,提示用戶已存在
當用戶創建完成時,提示用戶已創建
當用戶密碼創建成功時,提示用戶密碼已生成並退出腳本
當使用 “-d” 命令時,彈出對話框,輸入用戶名,刪除用戶,當用戶刪除後,提示用戶已刪除
如果所輸入的用戶名不在系統用戶內,報錯,提示輸入系統用戶
腳本測試
sh userctrl.sh
腳本後面沒有跟命令,報錯,提示-d 或 -c 命令
sh userctrl.sh -c
創建用戶
leon
用戶名
密碼
提示創建完成
su - leon
exit
sh userctrl.sh -d
leon
刪除用戶
提示已刪除
id leon
別名設置
命令別名就是爲一條命令定義一個命令名,執行這個新的命令名就相當於執行這條命令
創建臨時別名
alias look='cat'
定義臨時別名
alisa
查看別名
cat -n test1
look -n test1
別名定義成功
unalias look
刪除 臨時別名
創建用戶級別名
vim /root/.bashrc
編輯 /root/.bashrc 配置文件
添加
alias look='cat'
source /root/.bashrc
立刻生效
cat -n test1
look -n test1
系統級全局別名
vim /etc/bashrc
source /etc/bashrc
su - student
切換用戶
look -n f1
別名生效
alias look='cat'
命令執行結果設定變量
Hostname=$(hostname)
Hostname=
hostname
$?
命令執行完成後產生的退出值(範圍是[0-255])
當$0=0時表示命令執行沒有錯誤輸出
這個值可以用 exit 設置
例如:exit 111
cat test.sh | tail -n 2
Shell
腳本中的函數
腳本中的函數是把一個複雜的語句塊定義成一個字符串的方法
實驗
1、測試所有 ping 網絡可達的主機,並導入/host_ip 文件內
vim ceshiping.sh
腳本思路
判定文件是否存在
沒有存在,生成文件
已存在,提示 重新寫入 、備份 、 略過 三個基本功能
彈出對話框,輸入所需要功能
重新寫入–覆蓋原文件並生成新文件
備份–刪除原文件並生成新備份文件
略過–跳過,什麼都不做
在這裏還需要注意大小寫,無論大寫還是小寫命令都應生效
最後測試 廣播域內的 ip 是否開啓並導入文件內
vim ceshiping.sh
sh -x ceshiping.sh
先判斷沒有 /host_ip 文件
再創建文件並導入廣播域內網絡可達 ip
sh ceshiping.sh
文件已存在
小寫 o 可使用
大寫 o 可使用
o
–重新寫入文件
cat /host_ip
sh ceshiping.sh
文件已存在
b
–備份
cat /host_ip.bak
sh ceshiping.sh
文件已存在
s
–略過,什麼都不做
2、創建用戶及用戶密碼
腳本思路
當用戶存在,提示用戶存在
當用戶不存在,創建用戶及用戶密碼
退出
vim create_user.sh
sh create_user.sh
輸入用戶名
輸入用戶密碼
創建成功
exit
退出
For 循環
For
do
done
for x in a b c
循環條件
do
開啓
echo $x
執行命令
done
完成
字符 a、b、c 依次輸出
for x in
seq 1 2 10
do
echo $x
done
seq 1 2 10
設置步長
for x in {1..10}
do
echo $x
done
for x in {10..1}
do
echo $x
done
for x in {a..f}
do
echo $x
done
實驗
1、倒計時
vim daojishi.sh
腳本思路
首先使用循環命令
倒數計數:一秒一顯示
sh daojishu.sh
倒計時在一行顯示,echo -n
While
循環
while
do
done
sh true.sh
首先判斷退出
其次使用 while true 寫一個死循環
最後使用 exit 退出
sh true.sh
leon
leo
zhang
exit
該腳本是一個死循環腳本,沒有判斷 退出 ,無限循環
Until
循環
until
do
done
sh until.sh
首先判斷退出
其次使用 until false 寫一個死循環
最後使用 exit 退出
sh until.sh
gg
asd
exit
該腳本是一個死循環腳本,沒有判斷 退出 ,無限循環
分鐘:秒鐘–倒計時
vim daojishu1.sh
腳本思路
當秒鐘從10開始,走到0時,分鐘由1變爲0
當分鐘變爲0時,秒鐘從59開始,走到0結束
sh daojishu1.sh
分鐘1
秒鐘6
分鐘0
秒鐘57