1. 程式人生 > >linux運維、架構之路-shell編程入門

linux運維、架構之路-shell編程入門

if語句 blog exp chkconfig 問題 架構之路 判斷目錄 cal 常用

一、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編程入門