shell學習之編程基礎知識

有學過編程語言的同窗們都可以很快入手shell由於基礎的字符類型,循環語句與C語言也差很少。如下咱們來了解如下新手基礎:mysql


1.在學習循環語句以前先了解一些基礎的字符信息:
sql

$0、$一、$二、$?、$*、$#shell

$0 表明sh程序本身,例如: sh auto_system_backup.sh ,那麼這裏的$0就是auto_system_backup.sh數據庫

    Usage: { $0 /boot /etc} 這是編程中的提示信息:獲得的顯示結果是Usage: { auto_system_backup.sh /boot /etc} 編程

$1表明的是執行腳本後面的第一個參數,例如:sh auto_system_backup.sh  /ect/ /tmp/ 那麼這裏的$1就是/ect/ ,天然/tmp/ 是$2ubuntu

    當咱們須要選擇性的執行某些任務時$1等就會排上用場,例如:上面幾張博文中提到的選擇備份數據庫中就用到了$1數組

------------------------------------------------------------------------------------------------
bash

if [ -z "$1" ];then編程語言

        echo -e "\033[32mUsage:\nPlease Enter DataBase that you will backup \n-------------------------------\n\nUsage: { $0 mysql } \033[0m"ide

        exit

fi

-------------------------------------------------------------------------------------------------

$?表示以上命令執行都沒有錯誤,若是沒有就返回0,主要用在代碼中檢查錯誤,若是有錯就提示或者再也不執行下面的代碼

-------------------------------------------------------------------------------------------------

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

----------------------------------------------------------------------------------------------------

$* 表明的是執行腳本後面的全部參數

------------------------------------------------------------------------------

if [ -z "$*" ];then

        echo -e "\033[32mUsage:\nPlease Enter Your Backup Files or Directories\n-------------------------------\n\nUsage: { $0 /boot /etc} \033[0m"

        exit

fi

---------------------------------------------------------------------------------

$#表示的是執行腳本後面的全部參數的個數

如下一個腳本var02.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 $#"

-----------------------------------------

執行腳本:sh var02.sh abc edf 

結果以下:

#####################

The $1 is abc  

The $2 is edf  

The $? is 0       

The $* is abc edf

The $# is 2 

---------------------------------


2.接下來了解一些基礎的邏輯運算符:

-f 判斷文件是否存在 eg: if [-f filename]  

-d 判斷目錄是否存在 eg: if [-d dir]

eq 等於      應用於:整型比較

-ne 不等於   應用於:整型比較

-lt 小於      應用於:整型比較

-gt 大於      應用於:整型比較

-le 小於或等於   應用於:整型比較

-ge 大於或等於   應用於:整型比較

-a 雙方都成立(and)    邏輯表達式 -a 邏輯表達式

-o 單方成立(or)          邏輯表達式 -o 邏輯表達式

-z 空字符串  :-z "$*" 這裏的$*和$1都要以字符的形式出現

------------------------------------

在以上的一些腳本大家也能夠看到它們的身影,再仔細看看他們是起了什麼效果天然也就知道了。剩下的在之後腳本解析中你們本身去理解


3.循環語句:for if while 等

三個判斷語句都是編程中的基礎之基礎,在邏輯運算中也就是他們之間的互相嵌套來處理。如下給出幾個簡單的例子:

if語句:

一次判斷語句,判斷出[]中爲0就執行以後的語句

--------------------- 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這個目錄不存在咱們就建立它若是存在就提示信息,結合上面的$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   --這裏執行該腳本就要手動的添加參數了

在以上的腳本中咱們還能夠再加一個提示信息,提示用戶輸入參數。也就是判斷$1是否爲空,這裏我就很少寫了,本身結合前面的代碼修改吧!

elif語句:

-------------------輸入的分數判斷優劣-----------------------------


#!/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

------------------------------------------------------

wKiom1jlu5qRGbE_AAARCPe6NH4387.png-wh_50


for語句:

屢次判斷,只要條件成立就一直循環處理

----------------如下的代碼是計算1-15相加的總和---------

#!/bin/bash

j=0

for i in `seq 1 15`

do

j=`expr $i + $j`   --這裏至關於C語言中j=i+j

done

echo $j

---------------------


while語句:

也是屢次判斷直到條件不成立爲止

------------------------------------


#!/bin/bash

i=0

while (( $i < 10))

do

echo "The number is $i"

((i++))

done

----------------------------

select語句:

這語句主要用於選取,並得到選取的值,如下程序運行選取的2那麼就會得到$i的值爲數組中的第二個

語法結構:

select i in "1" "2" "3";

do

    代碼。。。。。。。

done

----------------------------------

#!/bin/bash

select i in "Centos" "Redhat" "ubuntu";

do

        echo "Select you use system:"$i;

done

--------------------------------------

wKiom1jlx3ywviXkAAAUUNM4cL4103.png-wh_50

這個select語句大部分時候是結合case語句來處理問題


case語句:   在編寫大型自動化腳本中佔很重要的地位

---------------------------如下代碼主要是用於選擇性執行程序代碼--------------

#!/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

----------------------------------------------------------------------------

咱們看看執行效果:

wKioL1jlypmyQ5acAAAeEfDFj1o060.png-wh_50

很顯然在後面接了參數後就開始執行在該模塊下的代碼,每一個模塊下咱們能夠寫任何的shell代碼去執行。在後期的大規模服務部署中徹底能夠將全部代碼揉在其中嘛。好比自動安裝服務、配置服務,數據庫備份、數據庫恢復,目錄數據同步、版本升級等等。均可以可是爲了避免要弄的很複雜建議不要寫太多的功能在其中。如下結合case和select寫一個簡單的沒有具體執行任務的小腳本:

--------------------------------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

------------------------------------------------------------------------

因爲在每一個模塊下只有簡單的顯示代碼,咱們能夠在後期根據本身的須要將代碼完善,執行效果以下

wKioL1jlzfrBC4U4AAAkD1VcLnM235.png-wh_50

很顯然這個代碼更智能一些,在執行程序後能夠提示更多選擇,在這個腳本上能夠擴展出不少東西從而實現更多的自動化處理。

相關文章
相關標籤/搜索