Shell編程入門(第二版)(中),shell編程入門

來源:互聯網
上載者:User

Shell編程入門(第二版)(中),shell編程入門
變數測試語句-test

作用:用來測試變數是否相等,是否為空白,檔案類型等。

格式:

test 測試條件 或 []#範圍:整數,字串,檔案 

 

1)整數測試: 

test int1 -eq int2 測試整數是否相等 

test int1 -ge int2 測試int1是否>=int2 

test int1 -gt int2 測試int1是否>int2 

test int1 -le int2 測試int1是否<=int2 

test int1 -lt int2 測試int1是否<int2 

test int1 -ne int2 測試整數是否不相等

 

2)字串測試: 

test str1=str2 測試字串是否相等 

test str1!=str2 測試字串是否不相等 

test str1 測試字串是否不為空白 

test -n str1 測試字串是否不為空白 

test -z str1 測試字串是否為空白

 

3)檔案測試: 

test -d file 指定檔案是否目錄 

test -f file 指定檔案是否常規檔案 

test -x file 指定檔案是否可執行 

test -r file 指定檔案是否可讀 

test -w file 指定檔案是否可寫 

test -a file 指定檔案是否存在 

test -s file 檔案的大小是否非0

 

注:test測試語句一般不單獨使用,一般作為if語句的測試條件,如;

if test -d filethen....fi


 

test的變數的簡寫形式”[]”

 

樣本-apachtest.sh

#!/bin/bash# A test shell script for test Apache is running or notweb=$(/usr/bin/pgrep httpd)echo "Now let's test the Apache..."echo#if [ "$web" != "" ]if [ -n "$web" ]then    echo "Apache is running..."else    echo "Apache is NOT running..."    /etc/rc.d/init.d/httpd startfi

流程式控制制語句

流量控制語句:用於控制shell程式的流程 

exit語句:退出程式執行,並返回一個返回碼,返回碼為0表示正常退出,非0表示非正常退出。 

例如:exit 0 

 

一、if

if/then格式

if test -d $1 then ... fi 

樣本-if_then.sh

#!/bin/bash# A test shell script for if/thenif [ -x /etc/rc.d/init.d/httpd ]then    echo "Script: /etc/rc.d/init.d/httdp have x power!"    /etc/rc.d/init.d/httpd restartfi

if/else格式

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

多個條件的聯合: 

-a:邏輯與,僅當兩個條件都成立時,結果為真。 

-o:邏輯或,兩個條件只要有一個成立,結果為真。

 

樣本-if_else.sh

#!/bin/bash# A test shell script for if/elif/elseecho -n "Please input a filename: "read filenameif [ -d $filename ]then    echo "$filename is a directory"elif [ -f $filename ]then    echo "$filename is a commen file"elif [ -c $filename -o -b $filename ]then    echo "$filename is a device file"else    echo "$filename is a unkown file"fi

 

樣本-if_elif_exit.sh

#!/bin/bash# A test shell script for if/elifif [ $# -ne 2 ] thenecho "Not enough parameters"exit 1fiif [ $1 -gt $2 ]then    echo "$1 is great then $2"elif [ $1 -lt $2 ]then    echo "$1 is little then $2"else    echo "$1 is equal as $2"fi

二、for/in

for 變數 in 名字表 do 命令列表 done 

樣本-for.sh

#!/bin/bash# A test shell script for "for"for DAY in Sunday Monday Tuesday Wednesday Thursday Friday Saturdaydo    echo "The day is $DAY"done


awk命令[分段提取]

awk -F域分隔字元 ‘命令’[單引號]#如果不用-F指定分割符,預設為空白格

 

1、檢測系統中UID為0的使用者 

awk -F: '$3==0 {print $1}' /etc/passwd

#awk -F: '{print $1}' /etc/passwd

-F:指定分割附為:

$3表示以:為分割附的第三位

 

2、檢測系統中密碼為空白的使用者 

awk -F: 'length($2)==0 {print $1}' /etc/shadow 

#ps aux | grep -v root | awk '{print $2}'

樣本-awk.sh

#!/bin/bash# A test script for desplay users infomation/bin/echo -n "Please input a username: "read username/bin/grep $username /etc/passwd > /dev/null 2> /dev/nullif [ $? -eq 0 ]then    /bin/echo "username is: $username"else    /bin/echo "user: $username is not exits."    exit 1fi/bin/echo# list /etc/passwd infouserinfo=`/bin/grep ^$username:x /etc/passwd`uid=`echo $userinfo | awk -F: '{print $3}'`gid=`echo $userinfo | awk -F: '{print $4'}`dir=`echo $userinfo | awk -F: '{print $6}'`shell=`echo $userinfo | awk -F: '{print $7}'`# get /etc/group infogroupinfo=`/bin/grep x:$gid /etc/group`gname=`/bin/echo $groupinfo | awk -F: '{print $1}'`/bin/echo "user id is: $uid"/bin/echo "default group is: $gname"/bin/echo "home directory is: $dir"/bin/echo "shell is: $shell"/bin/echo "group member info:"# get group membersgroups=`/usr/bin/groups $username`/bin/echo $groups/bin/echo# get online infoonline=`/usr/bin/who | grep $username`if [ -z "$online" ]then    echo "$username is not online"else    echo "$username is online..."fi

 

執行個體-killuser.sh

#思路:將一個使用者所有的進程包括shell都關閉,則相當於將該使用者踢出了系統#!/bin/bash# A shell sript to kill a user in Linuxusername=$1killpid=`/bin/ps aux | grep $username | awk '{print $2}'`for PID in $killpiddo    /bin/kill -9 $PID 2> /dev/nulldone


在shell編程中對於$2的描述正確的是

一般情況下是這樣的:

<ShellScript> <option...>
例:
shell.sh abc bcd

那麼$1就是abc $2就是bcd 即命令列輸出的第二個option(參數)
 
shell編程 $@ $* 分別表示什意思

這兩個都是讀取運行shellscript時後面所接的參數,並且把它們連成一個字串,供調用。即$@ = $* = $1+$2+$3……

舉個例子吧:下面是一個簡單的shellscript,叫01.sh。
==========================
#!/bin/bash
#Tim: For "zhidao.baidu.com" to understand the parameter "$@""$*"
#Name:01.sh
echo $*
echo $@
==========================
改好許可權後,這樣運行:./01.sh 參數1 參數2 參數3
運行結果是:
參數1 參數2 參數3
參數1 參數2 參數3
---------------------------------
===============
題外話:還有個特殊參數是 $# 這個就是統計執行shellscript時所有參數的個數。
舉個例子,在上面的指令碼中增加 echo $# 如下:
==========================
#!/bin/bash
#Tim: For "zhidao.baidu.com" to understand the parameter "$@""$*"
#Name:01.sh
echo $*
echo $@
==========================
繼續按照剛才的運行方式運行一下,結果如下:
參數1 參數2 參數3
參數1 參數2 參數3
3
-----------------
最後一行的這個“3”,就是 echo $# 的結果。也就是統計了有多少個參數。
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.