您好,登錄后才能下訂單哦!
有學(xué)過(guò)編程語(yǔ)言的同學(xué)們都能夠很快入手shell因?yàn)榛A(chǔ)的字符類型,循環(huán)語(yǔ)句與C語(yǔ)言也差不多。以下我們來(lái)了解以下新手基礎(chǔ):
1.在學(xué)習(xí)循環(huán)語(yǔ)句之前先了解一些基礎(chǔ)的字符信息:
$0、$1、$2、$?、$*、$#
$0 代表sh程序自己,例如: sh auto_system_backup.sh ,那么這里的$0就是auto_system_backup.sh
Usage: { $0 /boot /etc} 這是編程中的提示信息:得到的顯示結(jié)果是Usage: { auto_system_backup.sh /boot /etc}
$1代表的是執(zhí)行腳本后面的第一個(gè)參數(shù),例如:sh auto_system_backup.sh /ect/ /tmp/ 那么這里的$1就是/ect/ ,自然/tmp/ 是$2
當(dāng)我們需要選擇性的執(zhí)行某些任務(wù)時(shí)$1等就會(huì)排上用場(chǎng),例如:上面幾張博文中提到的選擇備份數(shù)據(jù)庫(kù)中就用到了$1
------------------------------------------------------------------------------------------------
if [ -z "$1" ];then
echo -e "\033[32mUsage:\nPlease Enter DataBase that you will backup \n-------------------------------\n\nUsage: { $0 mysql } \033[0m"
exit
fi
-------------------------------------------------------------------------------------------------
$?表示以上命令執(zhí)行都沒(méi)有錯(cuò)誤,如果沒(méi)有就返回0,主要用在代碼中檢查錯(cuò)誤,如果有錯(cuò)就提示或者不再執(zhí)行下面的代碼
-------------------------------------------------------------------------------------------------
if [ $? -eq 0 ];then
echo -e "\033[32mThe Mysql Backup $MYSQLDB Successfully!\033[0m"
else
echo -e "\033[32mThe Mysql Backup $MYSQLDB Failed,Please check.\033[0m"
fi
----------------------------------------------------------------------------------------------------
$* 代表的是執(zhí)行腳本后面的所有參數(shù)
------------------------------------------------------------------------------
if [ -z "$*" ];then
echo -e "\033[32mUsage:\nPlease Enter Your Backup Files or Directories\n-------------------------------\n\nUsage: { $0 /boot /etc} \033[0m"
exit
fi
---------------------------------------------------------------------------------
$#表示的是執(zhí)行腳本后面的所有參數(shù)的個(gè)數(shù)
以下一個(gè)腳本var02.sh可以顯示以上的參數(shù)效果:
-----------------------------------------
#!/bin/bash
#define path variables
#by authors robin 2017
echo "#####################"
echo "The \$1 is $1"
echo "The \$2 is $2"
echo "The \$? is $?"
echo "The \$* is $*"
echo "The \$# is $#"
-----------------------------------------
執(zhí)行腳本:sh var02.sh abc edf
結(jié)果如下:
#####################
The $1 is abc
The $2 is edf
The $? is 0
The $* is abc edf
The $# is 2
---------------------------------
2.接下來(lái)了解一些基礎(chǔ)的邏輯運(yùn)算符:
-f 判斷文件是否存在 eg: if [-f filename]
-d 判斷目錄是否存在 eg: if [-d dir]
eq 等于 應(yīng)用于:整型比較
-ne 不等于 應(yīng)用于:整型比較
-lt 小于 應(yīng)用于:整型比較
-gt 大于 應(yīng)用于:整型比較
-le 小于或等于 應(yīng)用于:整型比較
-ge 大于或等于 應(yīng)用于:整型比較
-a 雙方都成立(and) 邏輯表達(dá)式 -a 邏輯表達(dá)式
-o 單方成立(or) 邏輯表達(dá)式 -o 邏輯表達(dá)式
-z 空字符串 :-z "$*" 這里的$*和$1都要以字符的形式出現(xiàn)
------------------------------------
在以上的一些腳本你們也可以看到它們的身影,再仔細(xì)看看他們是起了什么效果自然也就知道了。剩下的在以后腳本解析中大家自己去理解
3.循環(huán)語(yǔ)句:for if while 等
三個(gè)判斷語(yǔ)句都是編程中的基礎(chǔ)之基礎(chǔ),在邏輯運(yùn)算中也就是他們之間的互相嵌套來(lái)處理。以下給出幾個(gè)簡(jiǎn)單的例子:
if語(yǔ)句:
一次判斷語(yǔ)句,判斷出[]中為0就執(zhí)行之后的語(yǔ)句
--------------------- if_files_exist00.sh-------------------
#!/bin/bash
#juge dir exist
#fome net 2017
if [ ! -d /home/test1 ];then
mkdir -p /home/test1
else
echo "This DIR is exist ,Please exist....."
fi
-------------------------------------------
以上的代碼解釋:如果/home/test1這個(gè)目錄不存在我們就創(chuàng)建它如果存在就提示信息,結(jié)合上面的$1稍微修改一下它
------------------ if_files_exist01.sh------------------------
#!/bin/bash
#juge dir exist
#from net 2017
DIR=$1
if [ ! -d $1 ];then
mkdir -p $1
else
echo "The dir $1 is exist ,Please exit....."
fi
---------------------------------------------------------------
sh if_files_exist01.sh /home/test02 --這里執(zhí)行該腳本就要手動(dòng)的添加參數(shù)了
在以上的腳本中我們還可以再加一個(gè)提示信息,提示用戶輸入?yún)?shù)。也就是判斷$1是否為空,這里我就不多寫了,自己結(jié)合前面的代碼修改吧!
elif語(yǔ)句:
-------------------輸入的分?jǐn)?shù)判斷優(yōu)劣-----------------------------
#!/bin/bash
#juge scores
#from net 2017
scores=$1
if [ -z $scores ];then
echo "Usage:{$0 60|80.}"
exit
fi
if [[ $scores -gt 85 ]];then
echo "very good!";
elif [[ $scores -gt 75 ]];then
echo "good!";
elif [[ $scores -ge 60 ]];then
echo "pass!";
else
echo "no pass!";
fi
------------------------------------------------------
for語(yǔ)句:
多次判斷,只要條件成立就一直循環(huán)處理
----------------以下的代碼是計(jì)算1-15相加的總和---------
#!/bin/bash
j=0
for i in `seq 1 15`
do
j=`expr $i + $j` --這里相當(dāng)于C語(yǔ)言中j=i+j
done
echo $j
---------------------
while語(yǔ)句:
也是多次判斷直到條件不成立為止
------------------------------------
#!/bin/bash
i=0
while (( $i < 10))
do
echo "The number is $i"
((i++))
done
----------------------------
select語(yǔ)句:
這語(yǔ)句主要用于選取,并獲得選取的值,以下程序運(yùn)行選取的2那么就會(huì)獲得$i的值為數(shù)組中的第二個(gè)
語(yǔ)法結(jié)構(gòu):
select i in "1" "2" "3";
do
代碼。。。。。。。
done
----------------------------------
#!/bin/bash
select i in "Centos" "Redhat" "ubuntu";
do
echo "Select you use system:"$i;
done
--------------------------------------
這個(gè)select語(yǔ)句大部分時(shí)候是結(jié)合case語(yǔ)句來(lái)處理問(wèn)題
case語(yǔ)句: 在編寫大型自動(dòng)化腳本中占很重要的地位
---------------------------以下代碼主要是用于選擇性執(zhí)行程序代碼--------------
#!/bin/bash
#auto install LAMP
#from net 2017
case $1 in
Apache)
echo "Wait install httpd server...."
tar -jxvf httpd-2.2.27.tar.bz2;cd httpd-2.2.27
;;
Mysql)
echo "Wait install mysql server...."
;;
PHP)
echo "Wait install mysql server...."
;;
*)
echo -e "\033[32mUsage:{$0 Apache|Mysql|PHP|help} \033[0m"
;;
esac
----------------------------------------------------------------------------
我們看看執(zhí)行效果:
很顯然在后面接了參數(shù)后就開始執(zhí)行在該模塊下的代碼,每個(gè)模塊下我們可以寫任何的shell代碼去執(zhí)行。在后期的大規(guī)模服務(wù)部署中完全可以將所有代碼揉在其中嘛。比如自動(dòng)安裝服務(wù)、配置服務(wù),數(shù)據(jù)庫(kù)備份、數(shù)據(jù)庫(kù)恢復(fù),目錄數(shù)據(jù)同步、版本升級(jí)等等。都可以但是為了不要弄的很復(fù)雜建議不要寫太多的功能在其中。以下結(jié)合case和select寫一個(gè)簡(jiǎn)單的沒(méi)有具體執(zhí)行任務(wù)的小腳本:
--------------------------------auto_lamp_case01.sh---------------------------------------
#!/bin/bash
#auto install LAMP
#fom net 2017
PS3="Select your will exec Menu:"
select i in "Apache" "Mysql" "PHP"
do
case $i in
Apache)
echo "Wait install httpd server...."
tar -jxvf httpd-2.2.27.tar.bz2;cd httpd-2.2.27
;;
Mysql)
echo "Wait install mysql server...."
;;
PHP)
echo "Wait install mysql server...."
;;
*)
echo -e "\033[32mUsage:{$0 Apache|Mysql|PHP|help} \033[0m"
;;
esac
done
------------------------------------------------------------------------
由于在每個(gè)模塊下只有簡(jiǎn)單的顯示代碼,我們可以在后期根據(jù)自己的需要將代碼完善,執(zhí)行效果如下
很顯然這個(gè)代碼更智能一些,在執(zhí)行程序后可以提示更多選擇,在這個(gè)腳本上可以擴(kuò)展出很多東西從而實(shí)現(xiàn)更多的自動(dòng)化處理。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。