天天看點

linux——Vim編輯器與Shell指令腳本

4.1 Vim文本編輯器

指令模式:控制光标移動,可對文本進行複制、粘貼、删除和查找等工作。

輸入模式:正常的文本錄入。(a鍵與i鍵分别是在光标後面一位和光标目前位置切換到輸入模式,而o鍵則是在光标的下面再建立一個空行)

末行模式:儲存或退出文檔,以及設定編輯環境。

linux——Vim編輯器與Shell指令腳本

标題Vim編輯器模式的切換方法

Vim中常用的指令

指令 作用
dd 删除(剪切)光标所在整行
5dd 删除(剪切)從光标處開始的5行
yy 複制光标所在整行
5yy 複制從光标處開始的5行
n 顯示搜尋指令定位到的下一個字元串
N 顯示搜尋指令定位到的上一個字元串
u 撤銷上一步的操作
p 将之前删除(dd)或複制(yy)過的資料粘貼到光标後面

末行模式中可用的指令

指令 作用
:w 儲存
:q 退出
:q! 強制退出(放棄對文檔的修改内容)
:wq! 強制儲存退出
:set nu 顯示行号
:set nonu 不顯示行号
:指令 執行該指令
:整數 跳轉到該行
:s/one/two 将目前光标所在行的第一個one替換成two
:s/one/two/g 将目前光标所在行的所有one替換成two
:%s/one/two/g 将全文中的所有one替換成two
?字元串 在文本中從下至上搜尋該字元串
/字元串 在文本中從上至下搜尋該字元串

4.1.1配置主機名稱

[[email protected] ~]# vim /etc/hostname
[[email protected] ~]# hostname
           

 需要使用:wq!指令才能儲存并退出文檔。

4.1.2 配置網卡資訊

在RHEL 5、RHEL 6中,網卡配置檔案的字首為eth,第1塊網卡為eth0,第2塊網卡為eth1;以此類推。而在RHEL 7中,網卡配置檔案的字首則以ifcfg開始,加上網卡名稱共同組成了網卡配置檔案的名字,例如ifcfg-eno16777736。

/etc/sysconfig/network-scripts目錄中(存放着網卡的配置檔案)。

[[email protected] network-scripts]# systemctl restart network
           

 4.1.3 配置Yum倉庫 (本地安裝軟體)

Yum軟體倉庫的作用是為了進一步簡化RPM管理軟體的難度以及自動分析所需軟體包及其依賴關系的技術。可以把Yum想象成是一個碩大的軟體倉庫,裡面儲存有幾乎所有常用的工具,而且隻需要說出所需的軟體包名稱,系統就會自動為您搞定一切。

第1步:進入到/etc/yum.repos.d/目錄中(因為該目錄存放着Yum軟體倉庫的配置檔案)。

第2步:使用Vim編輯器建立一個名為rhel7.repo的新配置檔案(檔案名稱可随意,但字尾必須為.repo)。

第3步:按配置參數的路徑挂載CD光牒,并把CD光牒挂載資訊寫入到/etc/fstab檔案中。

[[email protected] yum.repos.d]# vim rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
           

[rhel-media] :Yum軟體倉庫唯一辨別符,避免與其他倉庫沖突。

name=linuxprobe:Yum軟體倉庫的名稱描述,易于識别倉庫用處。

baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)。

enabled=1:設定此源是否可用;1為可用,0為禁用。

gpgcheck=1:設定此源是否校驗檔案;1為校驗,0為不校驗。

gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面參數開啟校驗,那麼請指定公鑰檔案位址。

 4.2 編寫Shell腳本

4.2.1 編寫簡單的腳本

[[email protected] ~]# vim example.sh
#!/bin/bash 
#For Example BY linuxprobe.com 
pwd 
ls -al
           
[[email protected] ~]# bash example.sh
           
[[email protected] ~]# bash example.sh
           

第一行的腳本聲明(#!)用來告訴系統使用哪種Shell解釋器來執行該腳本;第二行的注釋資訊(#)是對腳本功能和某些指令的介紹資訊。

4.2.2 接收使用者的參數

$0對應的是目前Shell腳本程式的名稱,$#對應的是總共有幾個參數,$*對應的是所有位置的參數值,$?對應的是顯示上一次指令的執行傳回值,而$1、$2、$3……則分别對應着第N個位置的參數值,如圖4-15所示。

4.2.3 判斷使用者的參數

linux——Vim編輯器與Shell指令腳本

條件測試語句的執行格式題

條件測試語句可以分為4種:檔案測試語句;邏輯測試語句;整數值比較語句;字元串比較語句。

檔案測試所用參數

操作符 作用
-d 測試檔案是否為目錄類型
-e 測試檔案是否存在
-f 判斷是否為一般檔案
-r 測試目前使用者是否有權限讀取
-w 測試目前使用者是否有權限寫入
-x 測試目前使用者是否有權限執行
[[email protected] ~]$ [ $USER = root ] || echo "user"
[[email protected] ~]# [ $USER != root ] && echo "user" || echo "root"
           

可用的整數比較運算符

操作符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
[[email protected] ~]# free -m | grep Mem: | awk '{print $4}'
[[email protected] ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
           

常見的字元串比較運算符

操作符 作用
= 比較字元串内容是否相同
!= 比較字元串内容是否不同
-z 判斷字元串内容是否為空

4.3 流程控制語句

4.3.1 if條件測試語句

linux——Vim編輯器與Shell指令腳本

多分支的if條件語句

ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
           

為了避免使用者等待時間過長,需要通過-c參數來規定嘗試的次數,并使用-i參數定義每個資料包的發送間隔,以及使用-W參數定義等待逾時時間。

4.3.2 for條件循環語句

for循環語句允許腳本一次性讀取多個資訊,然後逐一對資訊進行操作處理,當要處理的資料有範圍時,使用for循環語句再适合不過了。

linux——Vim編輯器與Shell指令腳本

for循環語句的文法格式

read -p "Enter your score(0-100):" GRADE
for UNAME in `cat users.txt`
           
HLIST=$(cat ~/ipadds.txt)
for IP in $HLIST
           

在腳本中使用read指令讀取使用者輸入的密碼值,然後指派給PASSWD變量,并通過-p參數向使用者顯示一段提示資訊。

4.3.3 while條件循環語句

linux——Vim編輯器與Shell指令腳本

while循環語句的文法格式

#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品實際價格為0-999之間,猜猜看是多少?"
while true
do
read -p "請輸入您猜測的價格數目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答對了,實際價格是 $PRICE"
echo "您總共猜測了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
           

$RANDOM變量來調取出一個随機的數值(範圍為0~32767),将這個随機數對1000進行取餘操作,并使用expr指令取得其結果。

4.3.4 case條件測試語句

linux——Vim編輯器與Shell指令腳本

case條件測試語句的文法結構

4.4 計劃任務服務程式

顧名思義,一次性計劃任務隻執行一次,一般用于滿足臨時的工作需求。我們可以用at指令實作這種功能

[[email protected] ~]# at 23:30
at > systemctl restart httpd
at > 此處請同時按下Ctrl+d來結束編寫計劃任務
           
[[email protected] ~]# echo "systemctl restart httpd" | at 23:30
           
[[email protected] ~]# at -l        (會列出序号,可用于下面的删除指令)
           
[[email protected] ~]# atrm 3
           

如果我們希望Linux系統能夠周期性地、有規律地執行某些具體的任務,那麼Linux系統中預設啟用的crond服務簡直再适合不過了。建立、編輯計劃任務的指令為“crontab -e”,檢視目前計劃任務的指令為“crontab -l”,删除某條計劃任務的指令為“crontab -r”。另外,如果您是以管理者的身份登入的系統,還可以在crontab指令中加上-u參數來編輯他人的計劃任務。

linux——Vim編輯器與Shell指令腳本

使用crond設定任務的參數格式

除了用逗号(,)來分别表示多個時間段,例如“8,9,12”表示8月、9月和12月。還可以用減号(-)來表示一段連續的時間周期(例如字段“日”的取值為“12-15”,則表示每月的12~15日)。以及用除号(/)表示執行任務的間隔時間(例如“*/2”表示每隔2分鐘執行一次任務)。

在crond服務的計劃任務參數中,所有指令一定要用絕對路徑的方式來寫,如果不知道絕對路徑,請用whereis指令進行查詢。

繼續閱讀