歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

shell運維自動化if-read

shell運維自動化if-read   今天的課程中我們將學習對用戶輸出的參數進行判斷。   例子:如果你說別人壞話?那就要挨打了。   故事2:      當你吃零食時,貓兒在你身邊叫的時候,你聽到了,然後你將手中的零食,分了一塊給小貓,小貓得到零食後,就離開你了。很顯然這只貓是吃貸。     下面我們拆分這個故事,並實現它。放開那只貓讓你來。   這個故事裡,聽,分,離開是關鍵字   主人公聽到後,做出的反應是分一點給貓,然後貓得到後就走了     2、1 read   shell:   read 從命令行讀取一行用戶輸入   根據編程來看用的最多的是:   read -p “你的描述” ppp   意思:   在命令行輸出一個提示用戶輸入的等待,然後定義了變量叫ppp(名字隨便取,好的習慣是,變量名要用意義,好比,西瓜為什麼叫西瓜不叫土豆?因為這是常識)   然後用戶輸入後,將用戶的輸入讀進變量ppp   我們接到了變量,然後就應該干嘛?對這變量使用之。 2.1.sh   #!/bin/sh   #code by scpman   #read   read -p "What's your Name: " name       echo "Hi," $name   echo "now Time : `date`"       在這個腳本中,我們提示用戶輸入名字,然後輸出hi,用戶輸出的名字,並在腳本中輸出了當前系統時間。   2、2 if   在2.1中,我們已經接到用戶輸入了,那你給貓一只狗,貓會吃嗎?任何時候,我們都不相信用戶的輸入!貓有原則,給只狗就是不吃,只吃老鼠(主人公在吃的零食)     如果你給的是老鼠,貓就吃,否則,就不吃。   那就用if來了解這個事吧   語法:   if ....then...fi   如果給的是老鼠,就吃   if ...else....fi   如果給的不是老鼠,而是別的呢   If....elif...elif....else...fi   如果給的是老鼠,或者給餅干,給別的等     if也在一些固定的表達式用來判斷一些問題:   列出一些:     條件表達式 文件表達式  if [ -f  file ]    如果文件存在 if [ -d ...   ]    如果目錄存在 if [ -s file  ]    如果文件存在且非空  if [ -r file  ]    如果文件存在且可讀 if [ -w file  ]    如果文件存在且可寫 if [ -x file  ]    如果文件存在且可執行    整數變量表達式  if [ int1 -eq int2 ]    如果int1等於int2    if [ int1 -ne int2 ]    如果不等於     if [ int1 -ge int2 ]       如果>= if [ int1 -gt int2 ]       如果> if [ int1 -le int2 ]       如果<= if [ int1 -lt int2 ]       如果<        字符串變量表達式  If  [ $a = $b ]                 如果string1等於string2                                 字符串允許使用賦值號做等號 if  [ $string1 !=  $string2 ]   如果string1不等於string2        if  [ -n $string  ]             如果string 非空(非0),返回0(true)   if  [ -z $string  ]             如果string 為空 if  [ $sting ]                  如果string 非空,返回0 (和-n類似)        條件表達式引用變量要帶$ ,並最好加” $變量名”(通過失敗的經驗得來的)   2.3 實例   1、如果給的是老鼠,貓就吃   思考:可能的情況:         A如果你只是揮了下手,什麼都沒給         B 如果你給的不是老鼠         C 如果你給了老鼠,卻扔給了別人   #!/bin/sh   #code by scpman   #cat’s food   read -p “Please input the cat’s food:” food   if [ -n “$food” ]   then     echo $food   fi       要是有輸入就輸出,沒有輸入就退出,並提示用戶什麼都沒輸入。   如果得到了輸入就進行判斷,如果給的是老鼠就說謝謝,如果不是老鼠就不要,並提示用戶   # vi 2.3.2.sh      #!/bin/sh   #code by scpman   #cat's food   read -p "Please input the cat's food:  " food   if [ -n "$food" ]   then     echo the food:$food    else           echo You give cat a null   fi       if [ "$food" = 'laoshu'  ]   then           echo 3Q,cat love laoshu   elif [ "$food" = 'pig' ]   then           echo sorry,cat not love pig   else           echo cat not like others!   Fi   # sh 2.3.2.sh    Please input the cat's food:     You give cat a null #這裡為空應該提示完直接退出?   cat not like others! #這一句怎麼也輸出了?     Shell:   exit 腳本退出    # vi 2.3.3.sh      #!/bin/sh   #code by scpman   #cat's food   read -p "Please input the cat's food:  " food   if [ -n "$food" ]   then     echo the food:$food    else           echo You give cat a null       exit ####看這裡,#號代表注釋,這樣當條件走這時,就直接提示並退出 了   fi       if [ "$food" = 'laoshu'  ]   then           echo 3Q,cat love laoshu   elif [ "$food" = 'pig' ]   then           echo sorry,cat not love pig   else           echo cat not like others!   Fi   # sh 2.3.3.sh   Please input the cat's food:     You give cat a null    這次就對了   # sh 2.3.3.sh   Please input the cat's food:  pig   the food:pig   sorry,cat not love pig   scpman# sh 2.3.3.sh   Please input the cat's food:  lkjdslfldsf   the food:lkjdslfldsf   cat not like others!   scpman# sh 2.3.3.sh   Please input the cat's food:  laoshu   the food:laoshu   3Q,cat love laoshu   當然用不了,寫這麼多行,就能搞定,本書的所有例子,不要求有多少行,只要求思路清晰   希望大家少寫NB的代碼(只有自己想幾次才看懂的代碼!)   看到著,免得被大家罵,咱們趕緊來一個有用的例子吧!     2.4   小實例:   判斷/usr/test目錄在不在,如果不在就輸出,然後建立這個目錄     建立完這個目錄後,讀/etc/passwd文件,找出文件中所有用戶並在/usr/test/下建立出各用戶名字對應的文件     編程:先看懂你要做什麼,然後喝口水,想好了思路再開始,一氣呵成。   外行:好,這個需求簡單,幾分鐘寫完了,然後再看下要求,再重復來,鍵盤也是有尊嚴的     # vi 2.4.sh      #!/bin/sh   #code by scpman   #mkdir ,touch file     mulu="/usr/test"     if [ -d "$mulu" ]   then           echo $mulu is have   else           mkdir $mulu           echo $mulu create ok   fi     for username in `cat /etc/passwd |grep -v "^#" | awk -F':' '{print $1}'`   do   cd $mulu   touch $mulu/$username   done   ls -l $mulu   腳本中的for循環部分明天講   # sh 2.4.sh   /usr/test create ok   total 0   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 _dhcp   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 _pflogd   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 bin   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 bind   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 daemon   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 games   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 kmem   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 mailnull   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 man   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 news   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 nobody   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 operator   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 pop   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 proxy   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 root   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 scpman   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 smmsp   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 sshd   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 toor   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 tty   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 uucp   -rw-r--r--  1 root  wheel  0 Jan 20 07:42 www  
Copyright © Linux教程網 All Rights Reserved