青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

興海北路

---男兒仗劍自橫行
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

統計

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

常用鏈接

留言簿(6)

隨筆分類

隨筆檔案

收藏夾

全是知識啊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

linux shell編程學習筆記
作者: falcon   發表日期: 2006-04-03 18:32   復制鏈接



這里只是我自己的個人學習筆記哦,要是想系統的學shell,應該找一些比較系統的資料
這里有一篇好的:http://www.chinaunix.net/jh/24/628472.html

shell概述、Shell變量、位置參數、特殊符號、別名、各種控制語句、函數等Shell編程知識

執行Shell腳本的方式

1)輸入重定向到bash: bash <exl
可以讀入exl中的程序,并執行
2)以腳本名作為參數
其一般形式是:
$ bash 腳本名 [參數]
例如:
$ bash ex2   /usr/meng   /usr/zhang
其執行過程與上一種方式一樣,但這種方式的好處是能在腳本名后面帶有參數,從而將參數值傳遞給程序中的命令,使一個Shell腳本可以處理多種情況,就如同函數調用時可根據具體問題給定相應的實參。
如果以目前Shell(以·表示)執行一個Shell腳本,則可以使用如下簡便形式:
$ · 腳本名 [參數]
以Shell腳本作為Shell的命令行參數,這種方式可用來進行程序調試。
3)將Shell腳本的權限設置為可執行,然后在提示符下直接執行它。
具體辦法:chmod 777 腳本名

Shell的執行原理
Shell 接收用戶輸入的命令(腳本名),并進行分析。如果文件被標記為可執行的,但不是被編譯過的程序,Shell就認為它是一個Shell腳本。Shell將讀 取其中的內容,并加以解釋執行。所以,從用戶的觀點看,執行Shell腳本的方式與執行一般的可執行文件的方式相似。
因此,用戶開發的Shell腳本可以駐留在命令搜索路徑的目錄之下(通常是“/bin”、 “/usr/bin”等),像普通命令一樣使用。這樣,也就開發出自己的新命令。如果打算反復使用編好的Shell腳本,那么采用這種方式就比較方便。


變量賦值

可以將一個命令的執行結果賦值給變量。有兩種形式的命令替換:一種是使用倒引號引用命令,其一般形式是: `命令表`。
例如:將當前工作目錄的全路徑名存放到變量dir中,輸入以下命令行:
$ dir=`pwd`
另一種形式是:$(命令表)。上面的命令行也可以改寫為:
$ dir=$(pwd)


數組

bash只提供一維數組,并且沒有限定數組的大小。類似與C語言,數組元素的下標由0開始編號。獲取數組中的元素要利用下標。下標可以是整數或算術表達式,其值應大于或等于0。用戶可以使用賦值語句對數組變量賦值。對數組元素賦值的一般形式是:數組名[下標]=值例如:
$ city[0]=Beijing
$ city[1]=Shanghai
$ city[2]=Tianjin
$
也可以用declare命令顯式聲明一個數組,一般形式是:
declare -a 數組名
讀取數組元素值的一般格式是:
${數組名[下標]}
例如:
$ echo ${city[0]}
Beijing
一個數組的各個元素可以利用上述方式一個元素一個元素地賦值,也可以組合賦值。定義一個數組并為其賦初值的一般形式是:
數組名=(值1 值2 ... 值n)
其中,各個值之間以空格分開。
例如:
$ A=(this is an example of shell script)
$ echo ${A[0]} ${A[2]} ${A[3]} ${A[6]}
this an example script
$ echo ${A[8]}
$
由于值表中初值共有7個,所以A的元素個數也是7。A[8]超出了已賦值的數組A的范圍,就認為它是一個新元素,由于預先沒有賦值,所以它的值是空串。
若沒有給出數組元素的下標,則數組名表示下標為0的數組元素,如city就等價于city[0]。
使用*或@做下標,則會以數組中所有元素取代 或[@]。

2006.8.19
最近在寫一個拆分字符串的代碼的時候用到了數組,我把實例寫一下
問題大概是這個樣子:我需要把一個存放有ip段的字符分開,分成開始地址和結束地址。
下面是解決辦法


Code:

[Ctrl+A Select All]




參數傳遞

假如我要編寫一個shell來求兩個數的和,可以怎么實現呢?
為了介紹參數傳遞的使用
我們用vi add編寫一個這樣的腳本:

let sum=$1+$2
echo $sum

保存后,我們執行一下:
#./add 5 10
15

可以看出5和10分別傳給了$1和$2
其實這是shell自己某人的參數順序,其實我們可以自己先定義好變量,然后傳遞進去

例如:
我們先修改上面的add文件:

let sum=$X+$Y
echo $sum

現在我們,這樣執行
#X=5 Y=10 ./add
15

我們同樣可以得到正確結果哦

設置環境變量

將shell程序的變量輸出到環境變量export

#opid=True
#export=opid

這樣子就可以拉
不過還可以直接到/etc/profile里頭去添加哦
具體操作類似
在里頭的export命令之前先增加
opid=True
然后在export命令后面增加opid項

鍵盤讀起變量值

我們可以通過read來讀取變量值哦
下面我們來等待用戶輸入一個值并且顯示出來

Quote:

falcon@falcon:~$ read -p "請輸入一個值 : "  input ; echo "你輸入了一個值為 :" $input
請輸入一個值 : 21500
你輸入了一個值為 : 21500



設置變量的只讀屬性

有些重要的shell變量,賦值后不應該修改,那么我們可設置他為readonly
具體操作:
#oracle_home=/usr/oracle7/bin
#readonly oracle_home

條件測試命令test
語法:test 表達式
如果表達式為真,則返回真,否則,返回假

1)數值比較
先給出數值比較時常見的比較符:
-eg   =
-ne   !=
-gt >
-ge >=
-lt <
-le <=

#test var1 -gt var2

2)文件屬性
文件的可讀、可寫、可執行,是否為普通文件,是否為目錄分別對應
    -r   -w   -x     -f         -d

#test -r filename

3)字符傳屬性以及比較

串的長度為零:-z 非零:-n

如:
#test -z s1  
如果串s1長度為零,返回真

串比較:相等s1=s2 不相等 s1!=s2
我們還有一種比較串的方法(可以按字典序來比較哦):

Quote:

falcon@falcon:~$ if [[ 'abcde' <'abcdf' ]]; then  echo "yeah,果然是誒"; fi
yeah,果然是誒


整數算術或關系運算expr
可用該命令進行的運算有
算術運算:+ - * / %
邏輯運算:= ! < <= > >=

如:
#i=5;expr $i+5

另外,bc是linux下的一個計算器,可以進行一些算術計算

控制執行流程命令

(1)條件分支命令if ,case

if命令舉例:

下面的shell作用:判斷輸入的第一個參數的值是一個普通文件名,那么分頁打印該文件;否則,判斷它是否為目錄名,若是則進入該目錄并打印該目錄下的所有文件,如果也不是目錄名,那么提示相關信息。

if test -f $1
then
              pr $1>/dev/lp0
elif
              test-d $1
then
              (cd $1;pr *>/dev/lp0)
else
                echo $1 is neither a file nor a directory
fi

case命令舉例:

case命令是一個基于模式匹配的多路分之命令
下面的shell將根據用戶鍵盤輸入情況決定下一步將執行那一組命令。

while [ $reply!="y" ] && [ $reply!="Y" ]                         #下面將學習的循環語句
do
        echo "\nAre you want to continue?(Y/N)\c"
        read reply             #讀取鍵盤
        case $replay in
              (y|Y) break;;         #退出循環
              (n|N) echo "\n\nTerminating\n"
                      exit 0;;
                    *) echo "\n\nPlease answer y or n"
                        continue;       #直接返回內層循環開始出繼續
        esac
done

(2)循環語句

條件循環語句while,until
語法:
while/until 命令表1
do
      命令表2
done

區別是,前者在執行完命令表1后,如果出口狀態為零,那么執行do后面的命令表2,然后回到起始處,而后者執行命令表1后,如果出口狀態非零,才執行類似操作。
[例子同上]

有限循環命令for
語法:
for 變量名 in 字符串表
do
    命令表
done
舉例:
FILE="test1.c myfile1.f pccn.h"
for i in $FILE
do
      cd ./tmp
      cp $i $i.old
      echo "$i copied"
done


函數

先在我們來看看shell里頭的函數怎么用

先看個例子:我們些一個函數,然后調用它顯示"Hello,World!"
#函數定義
function show
{
    echo $1$2;
}
H="Hello,"
W="World!"
show $H $W

保存為show
修改執行權限chmod 770 show
執行:
$./show
Hello,World!

呵呵,看出什么蹊蹺了嗎?
show $H $W
我們可以通過直接在函數明后面跟實參哦
實參順序對應“虛參”的$1,$2,$3..........

注意一個地方哦,假如我要傳進去一個參數,這個參數中間帶空格,怎么辦呢?
你先試試看

我們來顯示"Hello World"(兩個單詞之間有個空格哦)

function show
{
echo $1
}
HW="Hello World"
show "$HW"

看看,是不是ok拉,如果你 直接show $HW
肯定是不行的,因為$1只接受到了Hello,所以結果之顯示Hello
原因是字符串變量必須用"包含起來

感興趣的你繼續學習哦!
還有好多強大的東西值得你去學習呢,呵呵,比如cut, expr, sed, awk等等。

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            夜夜嗨一区二区| 一区二区三区在线免费观看| 一区二区三区精品| 亚洲激情第一区| 欧美福利视频| 亚洲电影免费观看高清| 欧美/亚洲一区| 亚洲国产福利在线| 日韩午夜精品视频| 亚洲午夜免费视频| 欧美一区二区三区视频免费播放| 午夜精彩国产免费不卡不顿大片| 欧美一级片在线播放| 久久精品一区中文字幕| 免费高清在线视频一区·| 欧美极品影院| 国产精品日韩| 136国产福利精品导航网址| 日韩午夜高潮| 性欧美长视频| 欧美成人精品激情在线观看 | 欧美在线网站| 欧美sm重口味系列视频在线观看| 亚洲国产欧美久久| 亚洲影院污污.| 麻豆av一区二区三区| 欧美日韩国产首页| 国内外成人免费激情在线视频网站 | 欧美有码视频| 欧美激情第8页| 亚洲一区二区三区影院| 久久久久国产免费免费| 欧美视频一区在线| 亚洲缚视频在线观看| 亚洲字幕一区二区| 欧美丰满少妇xxxbbb| 亚洲无限av看| 欧美交受高潮1| 伊人成人在线视频| 性欧美暴力猛交另类hd| 亚洲精品久久7777| 久久三级福利| 国产伦精品一区二区三区四区免费 | 黄色成人在线网址| 亚洲欧美另类在线| 亚洲黄色影院| 巨乳诱惑日韩免费av| 国产精品三级视频| 一区二区三区不卡视频在线观看| 久久一区二区三区四区| 亚洲一级特黄| 欧美午夜在线视频| 日韩视频中午一区| 欧美成人精精品一区二区频| 欧美在线3区| 国产精品亚洲产品| 亚洲欧美日本日韩| 宅男噜噜噜66一区二区| 欧美日韩视频在线第一区| 日韩视频免费| 亚洲精品久久久久| 欧美日韩中国免费专区在线看| 亚洲毛片视频| 亚洲区在线播放| 欧美高清在线一区二区| 亚洲精品国产拍免费91在线| 老鸭窝亚洲一区二区三区| 久久精品噜噜噜成人av农村| 国产在线观看91精品一区| 久久久久综合一区二区三区| 欧美在线不卡视频| 在线高清一区| 欧美大胆成人| 欧美激情一区二区三区四区| 99国内精品久久| 中文在线资源观看网站视频免费不卡| 欧美香蕉大胸在线视频观看| 午夜久久久久久| 欧美一级成年大片在线观看| 激情欧美日韩| 亚洲国产另类久久久精品极度 | 久久夜色精品国产欧美乱| 亚洲欧美成人一区二区三区| 欧美日韩在线亚洲一区蜜芽| 亚洲欧美日韩在线不卡| 性色av一区二区怡红| 黄色成人av网| 亚洲精品乱码| 国产精品羞羞答答| 麻豆精品网站| 欧美日韩在线电影| 久久精品国产亚洲一区二区| 久久久久久9| 在线综合亚洲| 久久激情网站| 一本久道久久久| 亚洲欧美在线视频观看| 亚洲国产精品久久精品怡红院| 日韩天天综合| 亚洲第一精品夜夜躁人人爽| 在线视频欧美日韩精品| 伊人成综合网伊人222| 日韩亚洲精品视频| 永久域名在线精品| 夜夜嗨av一区二区三区四季av| 国产一区二区无遮挡| 亚洲人成网在线播放| 国产精品一区在线观看你懂的| 亚洲风情在线资源站| 国产美女扒开尿口久久久| 亚洲欧洲一区二区三区在线观看| 国产日韩欧美91| 亚洲美女少妇无套啪啪呻吟| 狠狠色狠狠色综合日日五 | 久久激情中文| 亚洲一区国产一区| 老司机67194精品线观看| 小嫩嫩精品导航| 欧美日韩不卡在线| 欧美黄在线观看| 黄色精品一区二区| 亚洲尤物在线视频观看| 中文精品99久久国产香蕉| 免费视频一区| 另类图片国产| 国产亚洲欧洲997久久综合| 日韩亚洲欧美一区二区三区| 亚洲国产一区在线观看| 久久久91精品国产| 久久手机精品视频| 国产亚洲一区精品| 亚洲欧美色婷婷| 西西人体一区二区| 国产精品国产福利国产秒拍| 亚洲乱码国产乱码精品精可以看| 亚洲高清网站| 美女国产精品| 亚洲第一页中文字幕| 影音先锋日韩资源| 久久久久久伊人| 美日韩精品视频| 亚洲大片在线观看| 欧美1区2区| 亚洲国产精品尤物yw在线观看 | 这里是久久伊人| 亚洲人成在线播放网站岛国| 亚洲欧美视频在线观看| 午夜精品久久久久久久蜜桃app | 鲁大师影院一区二区三区| 国内一区二区三区| 久久精品二区三区| 欧美成人综合| 一区二区三区久久久| 欧美三级视频在线| 亚洲一区二区在线视频| 久久精品观看| 91久久黄色| 欧美日韩综合久久| 午夜欧美精品| 欧美国产在线视频| 一本不卡影院| 国产午夜精品久久久久久久| 久久久久久九九九九| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲第一毛片| 欧美www视频| 亚洲社区在线观看| 久久精品首页| 日韩亚洲欧美成人| 国产欧美在线观看| 免费视频一区| 亚洲欧美成人| 亚洲人成在线观看一区二区| 亚洲欧美激情视频| 亚洲高清激情| 国产精品久久久久久久久久免费看| 欧美一级播放| 99精品视频免费在线观看| 久久欧美中文字幕| 亚洲天堂黄色| 亚洲丰满在线| 国产伦精品一区二区三区高清版 | 欧美久久久久久久| 亚洲欧美怡红院| 亚洲日本中文| 久久久久久久高潮| 在线视频中文亚洲| 在线成人黄色| 国产欧美婷婷中文| 欧美精品粉嫩高潮一区二区| 性做久久久久久| 一本高清dvd不卡在线观看| 蜜桃av噜噜一区| 久久aⅴ国产欧美74aaa| 一区二区三区导航| 亚洲日本成人| 在线成人av.com| 国产在线不卡| 国产在线一区二区三区四区| 国产精品毛片|