linux運維、架構之路-shell編程入門
一、shell編程入門必備基礎
1、vim編輯器的命令,vimrc設置
2、150個linux基礎命令
3、linux中基礎的系統服務crond,ssh網絡服務,nfs,rsync,inotify,lnmp,sersync,nmap等
二、變量分類
1、全局變量
[[email protected] ~]# env HOSTNAME=nfs-server TERM=linux SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=172.19.5.146 49184 22 SSH_TTY=/dev/pts/1 USER=root ……
2、局部變量 只對當前shell用戶生效
定義環境變量:
①export OLDBOY=1——>定義環境變量,臨時生效
②如果想要全局生效,需要加入到環境變量配置文件
/etc/profile /etc/bashrc ~/.bashrc ~/.bash_profile
/etc/profile.d
③unset OLDBOY——>刪除環境變量
④盡量用有意義的字符串定義變量,比如大寫字母的方式
⑤駝峰語法定義:首個單詞字母小寫,其余單詞首字母大寫
devPath=/server/scripts
devFileList=`ls`
⑥註意單、雙引號的問題,一般字符串用雙引號定義
⑦引用變量時,註意金庸新著問題---將變量名用大括號包起來
echo ${week}day
3、特殊位置變量
$0 |
獲取當前執行的shell腳本的文件名,包括路徑 |
$n |
獲取當前執行的shell腳本的第N個參數值,n=1..9,如果n大於9,就用${10} |
$# |
獲取當前shell命令行中參數的總個數 |
$? |
0表示成功***** 2權限拒絕, 126找到了命令,但無法執行 |
$$ |
獲取當前shell的進程號(pid) |
三、read交互式設置變量
-p 設置提示語句
-t 設置超時時間
-s 關閉回顯,讓輸入不顯示在屏幕上
小題:寫個atm程序,讓你輸入你的銀行卡賬號和密碼,然後在屏幕上打印你的輸入結果
[[email protected] scripts]# sh atm.sh
請輸入你的銀行卡:18774499487766
請輸入你的密碼:765689
你的銀行卡 18774499487766
“你的密碼” 765689
四、 條件表達式
1、常用文件判斷
①判斷文件存在且為普通文件
[[email protected] scripts]# [ -f /etc/hosts ] && echo "表達式成立"||echo "表達式不成立" 表達式成立
②判斷目錄存在且為目錄文件
[[email protected] scripts]# [ -d /etc ] && echo "表達式成立"||echo "表達式不成立" 表達式成立
③判斷文件存在且為軟鏈接文件
[[email protected] scripts]# [ -L /etc/rc.local ] && echo "表達式成立"||echo "表達式不成立" 表達式成立
④判斷文件存在且可讀
[[email protected] scripts]# [ -r /etc/hosts ] && echo "表達式成立"||echo "表達式不成立" 表達式成立
⑤判斷文件存在且可執行
[[email protected] scripts]# [ -x /etc/init.d/sshd ] && echo "表達式成立"||echo "表達式不成立" 表達式成立
⑥判斷文件存在且可寫
[[email protected] scripts]# [ -w /etc/hosts ] && echo "表達式成立"||echo "表達式不成立" 表達式成立
2、常用字符串判斷
①判斷字符串長度是否為0
[[email protected] scripts]# [ -z "oldboy" ]&& echo "表達式成立"||echo "表達式不成立" 表達式不成立
②空則為0
[[email protected] scripts]# [ -z "" ]&& echo "表達式成立"||echo "表達式不成立" 表達式成立
③雙引號裏面有空格,空格不為0
[[email protected]bbix scripts]# [ -z " " ]&& echo "表達式成立"||echo "表達式不成立" 表達式不成立
3、 整數判斷
-eq等於 -ne不等於 -gt大於
-ge大等於 -lt小於 -le小等於
[[email protected] scripts]# [ 1 -gt 2 ] && echo "表達式成立"|| echo "表達式不成立" ——>判斷1大於2
表達式不成立
[[email protected] scripts]# [ 1 -eq 1 ] && echo "表達式成立"|| echo "表達式不成立" ——>判斷1等於1
表達式成立
[[email protected] scripts]# [ 1 -lt 2 ] && echo "表達式成立"|| echo "表達式不成立" ——>判斷1小於2
表達式成立
五、流程控制語句
1、if語句
語法:
一、if[判斷條件];then
執行的程序
elif[判斷條件];then
執行的程序
else
fi
單分支:一個條件一個結果
雙分支:一個條件兩個結果
多分支:多個條件多個結果
用if語句實現比較兩個整數的大小
[[email protected] scripts]# sh num.sh 1 2
1<2
[[email protected] scripts]# sh num.sh 1 1
1=1
[[email protected] scripts]# sh num.sh 2 1
2>1
2、case語句
語法:
case 值 in
模式1)
command
;;
模式2)
command
;;
*)
command
;;
esac
讓用戶通過輸入水果的名字,輸出到屏幕上並加顏色
給輸出字體加顏色
字體顏色設置:
echo -e "\033[30m 黑色字oldboy trainning \033[0m"
echo -e "\033[31m 紅色字oldboy trainning \033[0m"
echo -e "\033[32m 綠色字oldboy trainning \033[0m"
echo -e "\033[33m 黃色字oldboy trainning \033[0m"
echo -e "\033[34m 藍色字oldboy trainning \033[0m"
echo -e "\033[35m 紫色字oldboy trainning \033[0m"
echo -e "\033[36m 天藍字oldboy trainning \033[0m"
echo -e "\033[37m 白色字oldboy trainning \033[0m"
背景顏色:
echo -e "\033[40;37m 黑底白字 welcome to old1boy\033[0m"
echo -e "\033[41;37m 紅底白字 welcome to old2boy\033[0m"
echo -e "\033[42;37m 綠底白字 welcome to old3boy\033[0m"
echo -e "\033[43;37m 黃底白字 welcome to old4boy\033[0m"
echo -e "\033[44;37m 藍底白字 welcome to old5boy\033[0m"
echo -e "\033[45;37m 紫底白字 welcome to old6boy\033[0m"
echo -e "\033[46;37m 天藍白字 welcome to old7boy\033[0m"
echo -e "\033[47;30m 白底黑字 welcome to old8boy\033[0m"
關閉顏色\033[0m
3、for循環語句
語法:
#!/bin/bash
for i(變量) in {1..10} in後面可以加命令`ls` `seq 10`
do
echo $i
done
通過for循環寫一個開機自啟動優化腳本
[[email protected] scripts]# sh chkconfig.sh
[[email protected] scripts]# chkconfig|grep 3:on
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off
寫一個好玩的倒計時腳本,在屏幕上輸出10 09 08 07 06 05 ……
echo命令知識點小結:
echo -n 不換行 -e 支持特殊字符 \b退一格
4、while循環語句
true 為真,條件永遠成立
while true
do
echo "Hello world"
sleep 1
done
5、各個條件表達語句使用場景
if(取值判斷)
for(正常循環處理)語句最常用,
while(守護進程無限循環,小於1分鐘的任務都可以用while循環)
case(系統服務啟動腳本)
linux運維、架構之路-shell編程入門