• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            興海北路

            ---男兒仗劍自橫行
            <2009年3月>
            22232425262728
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統(tǒng)計(jì)

            • 隨筆 - 85
            • 文章 - 0
            • 評論 - 17
            • 引用 - 0

            常用鏈接

            留言簿(6)

            隨筆分類

            隨筆檔案

            收藏夾

            全是知識啊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            幾個(gè)shell程序設(shè)計(jì)小知識(shell常識部分)
            來源:http://www.chinaunix.net/jh/24/628479.html

            引用:一、用戶登陸進(jìn)入系統(tǒng)后的系統(tǒng)環(huán)境變量:
            $HOME 使用者自己的目錄
            $PATH 執(zhí)行命令時(shí)所搜尋的目錄
            $TZ 時(shí)區(qū)
            $MAILCHECK 每隔多少秒檢查是否有新的信件
            $PS1 在命令列時(shí)的提示號
            $PS2 當(dāng)命令尚未打完時(shí),Shell 要求再輸入時(shí)的提示號
            $MANPATH man 指令的搜尋路徑

            二、特殊變量:

            $0 這個(gè)程序的執(zhí)行名字
            $n 這個(gè)程序的第n個(gè)參數(shù)值,n=1..9
            $* 這個(gè)程序的所有參數(shù)
            $# 這個(gè)程序的參數(shù)個(gè)數(shù)
            $$ 這個(gè)程序的PID
            $! 執(zhí)行上一個(gè)指令的PID
            $? 執(zhí)行上一個(gè)指令的返回值

            三、shell中的變元:
            * 任意字符串
            ? 一個(gè)任意字符
            [abc] a, b, c三者中之一
            [a-n] 從a到n的任一字符

            四、幾個(gè)特殊字符表示

            \b 退回
            \c 打印一行時(shí)沒有換行符 這個(gè)我們經(jīng)常會用到
            \f 換頁
            \r 回車
            \t 制表
            \v 垂直制表
            \\ 反斜線本身

            五、判斷文件的屬性

            格式:-操作符 filename
            -e 文件存在返回1, 否則返回0
            -r 文件可讀返回1,否則返回0
            -w 文件可寫返回1,否則返回0
            -x 文件可執(zhí)行返回1,否則返回0
            -o 文件屬于用戶本人返回1, 否則返回0
            -z 文件長度為0返回1, 否則返回0.
            -f 文件為普通文件返回1, 否則返回0
            -d 文件為目錄文件時(shí)返回1, 否則返回0

            六、測試字符串
            字符串1 = 字符串2 當(dāng)兩個(gè)字串相等時(shí)為真
            字符串1 != 字符串2 當(dāng)兩個(gè)字串不等時(shí)為真
            -n 字符串      當(dāng)字符串的長度大于0時(shí)為真
            -z 字符串      當(dāng)字符串的長度為0時(shí)為真
            字符串       當(dāng)串字符串為非空時(shí)為真

            七、測試兩個(gè)整數(shù)關(guān)系
            數(shù)字1 -eq 數(shù)字2     兩數(shù)相等為真
            數(shù)字1 -ne 數(shù)字2     兩數(shù)不等為真
            數(shù)字1 -gt 數(shù)字2     數(shù)字1大于數(shù)字2為真
            數(shù)字1 -ge 數(shù)字2     數(shù)字1大于等于數(shù)字2為真
            數(shù)字1 -lt 數(shù)字2     數(shù)字1小于數(shù)字2為真
            數(shù)字1 -le 數(shù)字2     數(shù)字1小于等于數(shù)字2為真

            八、邏輯測試
            -a         與
            -o        或
            !        非



            今天介紹shell特殊字符的引用
            ===============================
            shell中的特殊字符有

            1、$ 美元符
            2、\ 反斜杠
            3、` 反引號
            4、" 雙引號
            5、< ,>,*,?,[,]

            下面我一一舉列說明
            一、$符號
            1、echo $? 顯示的是上一條指令退出狀態(tài)
            2、echo "$?" 效果同上
            3、echo '$?' 顯示的是$?
            4、echo \$? 顯示的是$?
            5、echo "\$?" 顯示的是$?

              大家可能已經(jīng)看出 $符號在雙引號中具有特殊意義 雙引號對$符號不起作用
            而單引號可以將特殊字符的的特殊意義屏蔽掉,使其能顯示為字符本身,反斜
            杠也可以將特殊字符的特殊含義屏蔽掉,使特殊字符失去特殊含義。

            二、\ 反斜杠
              反斜杠的作用是將特殊符號字符的特殊含義屏蔽掉,使其還是原字符
            A=1234
            echo \$A 顯示為$A 如果不加\將顯示為1234
            echo \` 顯示為`
            echo \" 顯示為雙引號
            echo \\ 顯示為\

            三、` 反引號
              反引號的功能是命令替換,將反引號中的字符串做為命令來執(zhí)行,我們在用shell編程時(shí)經(jīng)常用的到 將系統(tǒng)命令的執(zhí)行結(jié)果賦給一個(gè)變量

            A=`date`
            echo $A 顯示的不是date而是當(dāng)時(shí)的時(shí)間串
            比如有一文件A的內(nèi)容如下 
            ABCDEFG
            1234456
            abcdefg

            B=`cat A|grep 234` # 檢索文件A中含有字符串234的行
            echo $B 將顯示為1234456
            echo "$B" 將顯示為什么?
            echo "\$B" 將顯示為什么?讀者自己試試

            四、" 雙引號
              在系統(tǒng)中有些特殊字符,為避免引用這些特殊字符 往往用雙引號或單引號將這些特殊字符引起來,使其不具有特殊含義。
              但有一部分特殊字符在引號中還是具有特殊含義,用雙引號引起來是不起作用的。本文中所列的前四個(gè)特殊字符在雙引號中還是特殊字符。為了使其不具有特殊含義一是用單引號引進(jìn)來二是用\反斜線使其失去作用。

              比如我們想原樣輸出這些特殊字符

            echo """
            echo "$"
            echo "\"
            echo "`"
               以上不是你所期望的結(jié)果,因?yàn)殡p引號對它們不起作用,你只能這樣才能輸出這些特殊字符的原形
            echo '"'
            echo '$'
            echo '\'
            echo '`'

            echo "\""
            echo "\$"
            echo "\\"
            echo "\`"
            將分別顯示為 " $ \ `
            五、其它特殊字符
              大家注意到 除了前四個(gè)特殊字符外 我將其它的特殊字符都放在一塊,這是因?yàn)榍八膫€(gè)特殊字符在雙引號中還是具有特殊含義,所以單獨(dú)拿出來講,除此以外的特殊字符如果你要輸出這些特殊字符的原形,你就可以用雙引號或單引號引起來使其失去特殊含義。
            < ,>,*,?,[,]對shell有特殊含義 但你可以用雙引號引起來輸入這些原形

              講了這么多大家是不是已經(jīng)注意到所有的特殊字符在單引號中失去特殊含義,如果你要輸出特殊字符原形但又記不清那些特殊字符在雙引號中不能輸出原形,建議你干脆用單引號引起來。

            今天介紹條件測試語句

            一、if 條件語句 
            格式:
            if 條件表達(dá)式
            then #當(dāng)條件為真時(shí)執(zhí)行以下語句
            命令列表
            else #為假時(shí)執(zhí)行以下語句
            命令列表
            fi

            if 語句也可以嵌套使用

            if 條件表達(dá)式1
            then
            if 條件表達(dá)式2
            then
            命令列表
            else
            if 條件表達(dá)式3
            then
            命令列表
            else
            命令列表
            fi
            fi
            else
            命令列表
            fi

            你可以進(jìn)行多層嵌套 一個(gè)if語句一定要跟一個(gè)fi 表示該層條件結(jié)束  否則會造成語法錯(cuò)誤
            結(jié)合前面講的 舉例如下:
            這里先講一個(gè)條件語句中用到的命令test 表示測試test后面的條件是否為真

            if test -f "$1"
            then
            lpr $1
            else
            if test -d "$1"
            then
            cd $1
            lpr $1
            else
            echo "$1不是文件或目錄"
            fi
            fi

            以上的例子還可以改成如下所示

            if test -f "$1"
            then
            lpr $1
            elif test -d "$1" #elif 同else if
            then
            (cd $1;lpr $1)
            else
            echo "$1不是文件或目錄"
            fi

            以上的例子不知您是否看懂是什么意思嗎?
            假如我們現(xiàn)在將這個(gè)例子保存為prfile
            chmod +x prfile
            執(zhí)行剛才的程序
            ./prfile aaa

            這個(gè)例子是檢查你的輸入的參數(shù)是否是一個(gè)文件 如果是就打印 如果是一個(gè)目錄 先轉(zhuǎn)目錄再打印 如果即不是文件也不是目錄給出提示

            二、多重條件測試語句case
            格式:
            case 字串 in
            模式) 命令列表;;
            模式) 命令列表;;
            ....
            esac

            多重條件語句是以case 開始以esac結(jié)束 中間可以有多個(gè)條件列表 功能是測試字串和和里面的模式有沒有匹配的,有就執(zhí)行里面的命令列表 模式也可以是*號 表示任意字串,每個(gè)模式里面的最后要心;;雙引號結(jié)束,否則會發(fā)生語法錯(cuò)誤。

            現(xiàn)舉例如下:

            case $1 in
            *.c)
            cc $1
            ;;
            *.txt)
            lpr $1
            ;;
            *)
            echo "未知的類型"
            esac

            假如將以上內(nèi)容保存在文件abc中

            chmod +x abc
            執(zhí)行 ./abc a.c   將會對文件a.c進(jìn)行編譯
            執(zhí)行 ./abc readme.txt 將會把文件通過打印機(jī)
            假如我將以上內(nèi)容改一下,你是否會知道它的執(zhí)行結(jié)果?

            case $1 in
            *)
            cc $1
            ;;
            *.txt)
            lpr $1
            ;;
            *.c)
            echo "未知的類型"
            esac

            今天介紹循環(huán)語句
            一. while 循環(huán)
            while 命令格式

            while 條件表
            do
            命令表
            done

            執(zhí)行過程

            shell首先執(zhí)行條件表,如果條件表的最后一條語句的退出狀態(tài)為零,則執(zhí)行盾環(huán)體內(nèi)的命令
            表,執(zhí)行完后,再檢查條件表,如果退出狀態(tài)為零將繼續(xù)執(zhí)行,如此循環(huán)往復(fù)直到條件表的
            最后一條語句的退出狀態(tài)非零. 退出狀態(tài)為零就是條件為真True.

            舉例說明 假如shell文件的內(nèi)容如下:

            Sum=0
            i=0
            while true #true是系統(tǒng)的關(guān)鍵詞 表示真
            do
            i=`expr $i + 1`
            Sum=`expr $Sum + $i`
            if [ $i = "100" ]
            then
            break;
            fi
            done
            echo $i $Sum
            最后這個(gè)程序顯示的是 100 5050
            這個(gè)程序的運(yùn)算就是將1到100加起來

            下面將這個(gè)程序再改動(dòng)一下


            Sum=0
            i=0
            while [ $i != "100" ]
            do
            i=`expr $i + 1`
            Sum=`expr $Sum + $i`
            done
            echo $i $Sum

            改動(dòng)后的程序運(yùn)算結(jié)果和上面是一樣 但程序比上面的要簡練

            在這個(gè)循環(huán)中還可以以until做為測試條件 它正好與while測試的條件相反,也就是當(dāng)條件為假時(shí)將繼續(xù)執(zhí)行循環(huán)體內(nèi)的語句,否則就退出循環(huán)體,下面還用這個(gè)例子.


            Sum=0
            i=0
            until [ $i = "100" ]
            do
            i=`expr $i + 1`
            Sum=`expr $Sum + $i`
            done
            echo $i $Sum
            當(dāng)i不等于100時(shí)循環(huán) 就是當(dāng)條件為假時(shí)循環(huán),否則就退出,而第一個(gè)例子是當(dāng)i不等于100
            時(shí)循環(huán),也就是測試條件為真時(shí)循環(huán).

            二.for 循環(huán)

            命令格式:
            for 變量 in 名字列表
            do
            命令列表
            done

            這里的名字列表是一個(gè)由空格分隔的字符串列表,shell在執(zhí)行for循環(huán)時(shí)每次依次從名字表
            中取出一個(gè)字符串賦給循環(huán)變量作為變量的值.
            在寫for語句時(shí),也可以省略in 名字列表部分,這表示用當(dāng)前的位置參數(shù)來代替這時(shí)的名
            字列表.
            下面舉個(gè)例子
            比如在你的電腦中有兩個(gè)目錄,一個(gè)是aa,一個(gè)是bb在這兩個(gè)目錄中有5個(gè)相同的文件,但其
            中一個(gè)目錄中的一個(gè)或多個(gè)文件剛剛修改過,現(xiàn)在我忘記剛才改的是那幾個(gè)文件 了,那么我靠梢員冉弦幌掄飭礁瞿柯嫉奈募橢懶?程序如下:

            for File in a1 a2 a3 a4 a5
            do
            diff aa/$File bb/$File
            done

            下面再舉一個(gè)不帶名字列表的例子

            for File
            do
            echo $Filw
            done

            文件內(nèi)容保存在a.sh中 并可執(zhí)行
            我們在執(zhí)行這個(gè)shell程序時(shí)命令行如下:
            a.sh a1 a2 a3 a4 a5
            執(zhí)行結(jié)果如下:
            a1
            a2
            a3
            a4
            a5
            大家從這個(gè)例子中可以看到命令行的參數(shù)被逐一讀入一次
            三.循環(huán)控制語句
            break 命令不執(zhí)行當(dāng)前循環(huán)體內(nèi)break下面的語句從當(dāng)前循環(huán)退出.
            continue 命令是程序在本循體內(nèi)忽略下面的語句,從循環(huán)頭開始執(zhí)行.

            一,命令組合:圓括號和花括號
            shell中有兩種方法將命令組合在一起:圓括號和花括號.圓括號使shell創(chuàng)建一個(gè)子shell
            來讀取并執(zhí)行括起來的名命令.左括號和右括號不論出現(xiàn)在命令行中的什么位置,shell都會
            認(rèn)為它們具有特殊的組合意義的.只有用雙引號將它們括起來引用,才表示圓括號或花括號
            的原義.例如:

            echo a(b)
            將出現(xiàn)語法上的錯(cuò)誤,要想輸出a(b)字符串 只能括起來
            echo "a(b)"
            或echo a"("b")"
            這樣才能被shell正確解釋.
            利用組合命令有什么作用呢?
            一,用圓括號組合命令
            圓括號的組合命令可以創(chuàng)建子進(jìn)程運(yùn)行組合程序,建立子進(jìn)程的功能是很有用的,因?yàn)?
            子shell在組合命令中的種種操作都不會影響到當(dāng)前shell的各變量的值.
            例如:
            子進(jìn)程在執(zhí)行組合命令時(shí)改變了工作目錄,并在新的工作目錄下執(zhí)行一系例命令,執(zhí)行
            完后它可以不必返回原工作目錄,因?yàn)樽舆M(jìn)程工作目錄的改變不會影響到當(dāng)前工作目錄.

            創(chuàng)建子進(jìn)程后將當(dāng)前的環(huán)境也同樣傳給子shell,當(dāng)前shell中用export輸出到環(huán)境中的
            各變量在子shell中同樣有效.


            花括號也可以將命令組合在一起.左 右花括號只有作為一條命令的第一個(gè)字出現(xiàn)時(shí),
            shell才它們含有特殊含義.
            與圓括號不同的是花括號并不創(chuàng)建子shell,只是由當(dāng)前的shell來讀取并執(zhí)行括起來的
            命令.有時(shí)用戶希望使用一組命令的順序輸出作為另一組命令的輸入,此時(shí)用花括號是很方
            便的.
            不論是用圓括號不是花括號,退出狀態(tài)都是等于最后一條括起來的命令的退出狀態(tài).


            二,可以在當(dāng)前shell中執(zhí)行的命令

            用戶在使用shell時(shí)一定要了解那些是可以在當(dāng)前shell中執(zhí)行的命令 那些不可以
            可以在當(dāng)前shell中執(zhí)行的命令有:

            break case cd continue
            echo eval exec exit
            export for if read
            readonly return set shift
            test times trap umask
            until wait while
            : {}

            posted on 2008-03-14 14:03 隨意門 閱讀(206) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲AV日韩AV永久无码久久| 久久国产精品无| 久久九九亚洲精品| 久久亚洲国产午夜精品理论片| 中文字幕亚洲综合久久2| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久人人爽人人爽人人片av高请| 久久久久成人精品无码中文字幕| 久久人妻少妇嫩草AV无码专区| 精品国产福利久久久| 久久精品国产福利国产琪琪| 老男人久久青草av高清| 久久精品国产亚洲精品2020| 亚洲国产成人久久精品动漫| 亚洲精品NV久久久久久久久久| 久久人与动人物a级毛片| 国产精品久久久久影视不卡| 手机看片久久高清国产日韩| 久久久久久亚洲精品成人| 99久久人人爽亚洲精品美女| 一本久道久久综合狠狠躁AV| 99999久久久久久亚洲| 久久午夜无码鲁丝片午夜精品| 狠狠色婷婷久久一区二区| 青青草原综合久久| 国产精品久久久久久久人人看| 久久―日本道色综合久久| 久久婷婷人人澡人人爽人人爱| 91久久九九无码成人网站| 中文精品久久久久人妻不卡| 99久久精品免费看国产| 亚洲人成网亚洲欧洲无码久久| 国产激情久久久久影院老熟女免费 | 国内精品久久久久| 色婷婷久久综合中文久久一本| 国内精品久久久久久99| 18禁黄久久久AAA片| 久久久人妻精品无码一区| 热久久国产精品| 久久精品国产亚洲综合色 | 好久久免费视频高清|