歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> shell運維自動化if-read

shell運維自動化if-read

日期:2017/3/1 16:20:25   编辑:SHELL編程
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