shell編程:
編譯器,解釋器
編程語言:機器語言,彙編語言,高級語言
靜態語言:編譯型語言
強類型
關鍵字
事先轉換成可執行格式
C,C++,JAVA,C#
動態語言:解釋性語言
弱類型
邊解釋邊執行(on the fly)
PHP,SHELL,python,perl
bash:腳本解釋器
面向對象
面向過程
變量:內存空間,命名
內存:編址的存儲單元
變量類型:事先確定數據的存儲格式和長度
字符
數值
整型
浮點型
強類型:變量在使用前,必須事先聲明,甚至還要初始化
弱類型:變量用時聲明,甚至不區分類型
顯式轉換
隱式轉換
bash變量類型:默認是字符串
環境變量
本地變量(局部變量)
位置變量
特殊變量
本地變量:
VARNAME=VALUE:作用域爲個整個bash進程
local VARNAME=VALUE:作用域爲當前代碼段
環境變量:
export VARNAME=VALUE
export VARNAME
變量引用:${}
腳本執行時會啓動一個子shell
命令行中啓動的腳本會繼承當前shell環境變量
系統自動執行的腳本(非命令行啓動)就需要自我定義各環境變量
位置變量:
$1,$2,$3,...
特殊變量:
$?:上一個命令的執行狀態返回值
程序執行返回值:
結果
返回代碼
0:正確
1-255:錯誤
/dev/null:軟件設備,bit bucket,數據黑洞
撤消變量:
unset VARNAME
查看當前shell變量 :set
查看當前shell環境變量:printenv,env,export
腳本:命令的堆砌
shebang:魔數
#!/bin/bash
#後面爲註釋
練習:寫一個腳本,完成以下任務
1.添加5個用戶, user1,..., user5
2.每個用戶的密碼同用戶名,而且要求,添加密碼完成後不顯示passwd命令的執行結果信息;
3.每個用戶添加完成後,都要顯示用戶某某已經成功添加;
useradd user1
echo "user1" | passwd --stdin user1 &> /dev/null
echo "Add user1 successfully."
bash中的條件判斷
條件測試類型:
整數測試
字符測試
文件測試
條件測試的表達式:
[expression](命令)
[[expression]](關鍵字)
test expression
整數比較:
-eq:equal
-ne:not equal
-gt:greater than
-lt:less than
-ge:greater or equal
-le:less or equal
命令的邏輯關係:
與:&& 第一個條件成立時才執行第二個條件
或:|| 第一個條件不成立時才執行第二個條件
command1 && command2 || command3
command1執行正確時執行command2
command1執行錯誤時執行command3
練習,寫一個腳本,完成以下要求:
1.添加3個用戶user1, user2, user3;但要先判斷用戶是否存在,不存在而後再添加;
2.添加完成後,顯示一共添加了幾個用戶;當然,不能包括因爲事先存在而沒有添加的;
3.最後顯示當前系統上共有多少個用戶;
練習,寫一個腳本,完成以下要求:
給定一個用戶:
1.如果其UID爲0,就顯示此爲管理員;
2.否則,就顯示其爲普通用戶;
練習:寫一個腳本
判斷當前系統上是否有用戶的默認shell爲bash;
如果有,就顯示有多少個這類用戶;否則,就顯示沒有這類用戶;
練習:寫一個腳本
判斷當前系統上是否有用戶的默認shell爲bash;
如果有,就顯示其中一個的用戶名;否則,就顯示沒有這類用戶;
練習:寫一個腳本
給定一個文件,比如/etc/inittab
判斷這個文件中是否有空白行;
如果有,則顯示其空白行數;否則,顯示沒有空白行。
練習:寫一個腳本
給定一個用戶,判斷其UID與GID是否一樣
如果一樣,就顯示此用戶爲“good guy”;否則,就顯示此用戶爲“bad guy”。
進一步要求:不使用id命令獲得其id號;
練習:寫一個腳本
給定一個用戶,獲取其密碼警告期限;
而後判斷用戶密碼使用期限是否已經小於警告期限;
提示:計算方法,最長使用期限減去已經使用的天數即爲剩餘使用期限;
如果小於,則顯示“Warning”;否則,就顯示“OK”。
圓整:丟棄小數點後的所有內容
練習:寫一個腳本
判定命令歷史中歷史命令的總條目是否大於1000;如果大於,則顯示“Some command will gone.”;否則顯示“OK”。
條件判斷,控制結構:
if ...; then
...
fi
if ...; then
...
else
...
fi
if ...; then
...
elif ...;then
...
elif ...;then
...
...
else
...
fi
shell中算術運算:
1.let 運算表達式
2.$[運算表達式]
3.$((運算表達式))
4.expr 運算表達式 c=`expr $a + $b`
exit:退出腳本
exit n
如果腳本沒有明確定義退出碼,那麼,最後執行的一條命令的退出碼作爲腳本退出碼
文件測試:
-e:exist
-f:regular file
-d:directory
-r:readable
-w:writeable
-x:excutable
測試腳本是否有語法錯誤
bash -n filename:語法
bash -x filename:單步
練習:寫一個腳本
給定一個文件:
如果是一個普通文件,就顯示之;
如果是一個目錄,亦顯示之;
否則,此爲無法識別之文件;
位置參數:
./filetest.sh /etc/fstab /etc/inittab
$0 $1 $2
shift:參數偏移
shift n;
特殊變量:
$?:上一個命令退出碼
$#:位置參數的個數(不包括腳本本身)
$*:位置參數列表
$@:位置參數列表
練習:寫一腳本
能接受一個參數(文件路徑)
判定:此參數如果是一個存在的文件,就顯示“OK.”;否則就顯示"No such file."
練習:寫一個腳本
給腳本傳遞兩個參數(整數);
顯示此兩者之和,之乘積;
練習:寫一個腳本,完成以下任務
1.使用一個變量保存一個用戶名;
2.刪除此變量中的用戶,且一併刪除其家目錄;
3.顯示“用戶刪除完成”類的信息;
Linux運維第6天:Linux下shell編程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
linux下安裝並使用Gnuplot
isyslab
2018-08-27 07:01:56
mysql備份策略(全量備份+增量備份)
isyslab
2018-08-27 07:01:52
Linux常用網絡配置命令
IT人生-Panda
2018-08-27 03:08:30
Linux運維第5天:Linux下bash配置及I/O重定向和grep文本查找
will835559313
2018-08-26 21:45:32
Linux運維第9天:Linux下磁盤管理及使用掛載
will835559313
2018-08-26 21:45:29
Linux運維第4天:Linux權限及用戶管理
will835559313
2018-08-26 21:45:29
Linux運維第7天:Linux下sed工具及shell編程
will835559313
2018-08-26 21:45:29
Linux運維第9天:Linux下suid,sgid,acl,shell編程
will835559313
2018-08-26 21:45:29
Linux運維第2天:Linux文件系統詳解
will835559313
2018-08-26 21:45:16
Linux運維第8天:Linux下vim使用及find工具
will835559313
2018-08-26 21:45:16
Linux運維第3天:Linux文本處理及bash
will835559313
2018-08-26 21:45:16
Linux運維第1天:Linux操作系統基礎
will835559313
2018-08-26 21:45:13
tomcat編譯安裝
不会飞的大象
2018-08-26 19:18:08
MySQL5.7安裝+基於GTID主從複製+並行複製+增強半同步複製+讀寫分離+M-S-S架構(聯級複製)
不会飞的大象
2018-08-26 19:18:08
24小時熱門文章