shell腳本

shell 腳本(script):
shell 腳本文件:是一種linux操作命令的集合文件。用戶運行腳本文件時就會自動執行文件中的命令。

入門級(初級)腳本:腳本文件中僅包含一些操作命令,無任何邏輯判斷語句。這種腳本只會按從上到下的順序來執行命令,如果某行命令錯誤會自動跳過。

高級腳本:在入門級腳本的基礎上加入條件判斷if、循環(for、while、until)等邏輯控制語句,讓腳本更具有通用性和可移植性。

shell腳本的運行的過程:調用腳本文件中的命令--〉shell命令解釋器--〉kernel內核--〉hardware硬件

高級語言的程序運行過程:二進制程序文件--〉kernel內核--〉hardware硬件

實例:編寫一個入門級的腳本文件01.sh,要實現的功能是執行clear

第一步,編寫01.sh腳本文件

#!/bin/bash
#date:2019-02-18
#Author By : jim
#Decription: this is my first shell script.
clear
echo QQ:2364729138
cd
ls
pwd
sleep 5s
date
lsblk

chmod -v +x /sh/01.sh
. /sh/01.sh 或 source /sh/01.sh 或 /sh/01.sh 或 sh /sh/01.sh 或 bash /sh/01.sh

運行腳本並顯示腳本的執行過程:sh -x /sh/01.sh

技巧:
shell腳本學習的幫助文檔:man bash

 test  條件  語句  或  [  條件  ]

功能:用來判斷文件、權限、值(數值是否相等、是否爲空)。
幫助手冊:man test

test練習:

項目一:字符串的長度、值的判斷測試。
練習:判斷字符串長度爲0則爲真(true,狀態碼爲0)
[root@node11 ~]# x=''
[root@node11 ~]# test -z $x
[root@node11 ~]# echo $?
0

練習:判斷字符串長度不爲0則爲真(true,狀態碼爲0)
[root@node11 ~]# x=1234
[root@node11 ~]# test -n $x
[root@node11 ~]# echo $?
0

練習:判斷字符串內容相等爲真(true,狀態碼爲0)
[root@node11 ~]# test abc = abc
[root@node11 ~]# echo $?
0
[root@node11 ~]# test abc = abcde
[root@node11 ~]# echo $?
1

練習:判斷字符串內容不相等爲真(true,狀態碼爲0)
[root@node11 ~]# test abc != abcde
[root@node11 ~]# echo $?
0

項目二:整數值的大小(相等eq、不相等ne、大於gt、小於lt、大於或等於ge、小於或等於le)判斷測試。
練習:執行如下操作,熟悉整數值的大小判斷測試。
x=1314
y=520
z=520
test $x -eq $y
echo $?
test $z -eq $y
echo $?
test $x -ne $y
echo $?
test $x -gt $y
echo $?
test $x -lt $y
echo $?
test $z -lt $x 520 < 1314
echo $?
test $x -ge $y 1314 >= 520
echo $?
test $z -ge $y 520 >= 520
echo $?
test $y -le $x 520 <= 1314
echo $?
test $y -le $z 520 <= 520
echo $?

項目三:文件類型(目錄d、普通文件-、字符設備c、塊設備b、軟鏈接l、管道p、套接字s)、文件大小(大小爲0、不爲0)、文件的新舊、權限(ugo、rwx、facl、3種s權限等)的判斷測試。
[ -d /etc ]
echo $?

[ -f /etc/hosts ]
echo $?

[ -c /dev/tty ]
echo $?

[ -b /dev/sda ]
echo $?

[ -L /etc/rc.local ]
echo $?

find / -type p 在根目錄及其子目錄中查找類型爲管道的文件
[ -p /run/dmeventd-client ]
echo $?

find / -type s
[ -S /run/systemd/notify ]
echo $?

文件權限:判斷當前用戶對文件是否有可讀、可寫、可執行權限。
useradd ak
su - ak
pwd
touch a1
chmod -v 0 a1
[ -r a1 ] ; echo $?
chmod -v u+r a1
[ -r a1 ] ; echo $?
[ -w a1 ] ; echo $?
[ -x a1 ] ; echo $?
touch a2
[ -t 1 ] ; echo $? 文件描述符(FD,文件在內存中的數字代號)已在終端打開了
[ -t 168 ] ; echo $?

exit

複合條件判斷測試:邏輯非、邏輯與、邏輯或
[ ! abc = abcde ] ; echo $? 邏輯非
[ abc = abc -a 123 -eq 123 ] ; echo $? 邏輯與,同時滿足兩個條件就爲真(狀態碼爲0)
[ abc = abcd -o 123 -eq 123 ] ; echo $? 邏輯或,滿足其中一個條件就爲真(狀態碼爲0)


if條件語句:
3種結構:

if結構1:單條件,單分支。如果滿足if後面的條件1(即條件的結果狀態碼爲真[即爲0]),就執行then後面的語句。
if 條件1;then
command命令1
command命令2
fi

if語句的簡寫如下(命令的邏輯與執行):
命令1 && 命令2 等同於 if 條件1;then 命令列表;fi

例如:用if的結構1做如下測試。
x=abc;y=abc;z=123
if [ $x = $y ];then
echo yes
fi

if語句的簡寫如下:
[ $x = $y ] && echo yes

例如:判斷系統中是否存在root用戶,如果存在就提示yes。
用命令的邏輯執行來實現,方法如下:
id root && echo yes

用if語句來實現,寫法如下:
id root
if [ $? -eq 0 ];then
echo yes
fi

if結構2:單條件,雙分支。如果滿足if後面的條件1(即條件的結果狀態碼爲真[即爲0]),就執行then後面的語句,否則執行else後面的語句。
if 條件1;then
command命令1
command命令2
else
command命令3
command命令4
fi

if雙分支的簡寫:
命令1 && 命令2 || 命令3
解釋:命令1執行成功(狀態碼爲0),就執行命令2,否則執行命令3.

例如:用if的結構2做如下測試。
x=abc;y=abc;z=123
if [ $x = $y ];then
echo yes
else
echo no
fi

if語句的簡寫如下:
[ $x = $y ] && echo yes || echo no

例如:判斷系統中是否存在/zk目錄,如果存在就刪除此目錄且顯示過程,否則創建此目錄且顯示過程
方法一:用命令的邏輯執行方法來實現的寫法。
[ -d /zk ] && rm -rfv /zk || mkdir -pv /zk

方法二:用if語句實現的寫法。
if [ -d /zk ];then
rm -rfv /zk
else
mkdir -pv /zk
fi

例如:判斷系統中是否存在zk用戶,如果存在就用userdel -r zk刪除此用戶,否則創建zk用戶。
方法一:用命令的邏輯執行方法來實現的寫法。
id zk && userdel -r zk || useradd zk

方法二:用if語句實現的寫法。
if id zk;then
userdel -r zk
else
useradd zk
fi

if結構3:多條件,雙分支。如果滿足if後面的條件1(即條件的結果狀態碼爲真[即爲0]),就執行then後面的語句;否則測試elif後的條件2,滿足條件2就執行elif的then後面的語句;否則執行else後面的語句。
if 條件1;then
command命令1
command命令2
elif 條件2;then
command命令3
command命令4
else
command命令5
command命令6
fi

例如:用if的結構3做如下測試。做猜數字遊戲。
x=123
if [ $x -eq 123 ];then
echo 'you are right.'
elif [ $x -gt 123 ];then
echo 'you are bigger'
else
echo 'you are little.'
fi

例如:寫一個名稱爲/sh/cai.sh的腳本,要求提示用戶輸入數字,判斷數字大小是否爲520,如果是就提示yes;如果大於520,就提示bigger;否則提示little。
第1步,編寫/sh/cai.sh腳本文件。
mkdir -pv /sh
vim /sh/cai.sh
#!/bin/bash
#description:this is crossword games.
read -p 'Please input your number:' x
if [ $x -eq 123 ];then
echo 'you are right.'
elif [ $x -gt 123 ];then
echo 'you are bigger'
else
echo 'you are little.'
fi

第2步,添加x可執行權限,測試腳本的運行。
chmod -v +x /sh/cai.sh
. /sh/cai.sh

nfs軟件的自動安裝部署
1.提示用戶輸入共享目錄路徑。
2.判斷共享目錄是否已存在,如果存在就提示dir exsits,否則創建目錄。
3.判斷exports文件中是否已存在目錄的共享設置,如果存在就提示,否則在exports文件中以可讀可寫方式共享此目錄。
shell腳本

例:執行如下操作,理解單引號、雙引號的區別。
shell腳本
說明:echo 的-e 選項是允許識別\n換行符、\t tab鍵、\r回車符特殊字符。

說明:${x}通常等同於$x,那麼什麼時候需要將變量名用{}大括號括起來呢?
答:當變量名後面緊貼着其他字符時,爲了避免歧義,就需要將變量名用{}大括號括起來。

shell腳本
可以明確看到有沒有引號的區別

if語法:
單分支結構
if 條件測試
then
命令
fi

雙分支結構
if 條件測試
then
命令
else
命令
fi

多分支結構
if 條件測試1
then
命令1
elif 條件測試2
then
命令2
else
命令
fi

if 條件測試1
then
命令1
elif 條件測試2
then
命令2
elif 條件測試3
then
命令3
elif 條件測試4
then
命令4
else
命令
fi

if 條件測試;then
命令
else
命令
fi

if 條件測試1;then
命令1
elif 條件測試2;then
命令2
else
命令
fi

yum 源的一鍵配置
shell腳本

從1加到100的腳本

shell腳本

輸出3角行,乘法口訣

shell腳本

猜字遊戲
while是當條件爲真退出循環
until是直到滿足條件退出循環
while和until
shell腳本

刪除用戶

shell腳本

一鍵部署腳本
shell腳本
腳本創文件

shell腳本
創建用戶和密碼

shell腳本

dns一鍵部署

shell腳本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章