亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 15082 | 回復(fù): 12
打印 上一主題 下一主題

bash 語(yǔ)法 小結(jié)  關(guān)閉 [復(fù)制鏈接]

論壇徽章:
1
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-13 06:20:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2006-10-09 14:28 |只看該作者 |倒序?yàn)g覽
(發(fā)現(xiàn)都是命令的教程,grep,awk等,沒(méi)有語(yǔ)法的,我總結(jié)一些,拋磚引玉,希望高手補(bǔ)充)
1.變量賦值
a=123
read name
b=$(ls /home) 把命令的執(zhí)行結(jié)果賦值給變量
2.使用變量(前面用$)
echo $a
let a=a+1
系統(tǒng)變量
  1. $0 這個(gè)程序的執(zhí)行名字
  2.   $n  這個(gè)程序的第n個(gè)參數(shù)值,n=1...9
  3.   $*  這個(gè)程序的所有參數(shù)
  4.   $# 這個(gè)程序的參數(shù)個(gè)數(shù)
  5.   $$ 這個(gè)程序的PID
  6.   $! 執(zhí)行上一個(gè)背景指令的PID
  7.   $? 上一個(gè)指令的返回值
復(fù)制代碼

3.if語(yǔ)句
  1. if [ "22" -lt "33" ]注意空格
  2. then
  3. echo "22 less than 33"
  4. else
  5. echo "no"
  6. fi
復(fù)制代碼

4.case語(yǔ)句

  1. #!/bin/bash
  2. echo "enter a number"
  3. read ans
  4. case $ans in
  5. 1)
  6. echo  "you numer is $ans"
  7. ;;
  8. 2)
  9. echo "you number is 2"
  10. ;;
  11. [3-9])
  12. echo "you number is $ans"
  13. esac
復(fù)制代碼


5.比較運(yùn)算符
運(yùn)算符        描述        示例
文件比較運(yùn)算符
-e filename         如果 filename 存在,則為真        [ -e /var/log/syslog ]
-d filename         如果 filename 為目錄,則為真        [ -d /tmp/mydir ]
-f filename         如果 filename 為常規(guī)文件,則為真        [ -f /usr/bin/grep ]
-L filename         如果 filename 為符號(hào)鏈接,則為真        [ -L /usr/bin/grep ]
-r filename         如果 filename 可讀,則為真        [ -r /var/log/syslog ]
-w filename         如果 filename 可寫,則為真        [ -w /var/mytmp.txt ]
-x filename         如果 filename 可執(zhí)行,則為真        [ -L /usr/bin/grep ]
filename1 -nt filename2         如果 filename1 比 filename2 新,則為真        [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2         如果 filename1 比 filename2 舊,則為真        [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比較運(yùn)算符 (請(qǐng)注意引號(hào)的使用,這是防止空格擾亂代碼的好方法)
-z string         如果 string 長(zhǎng)度為零,則為真        [ -z "$myvar" ]
-n string         如果 string 長(zhǎng)度非零,則為真        [ -n "$myvar" ]
string1 = string2        如果 string1 與 string2 相同,則為真        [ "$myvar" = "one two three" ]
string1 != string2        如果 string1 與 string2 不同,則為真        [ "$myvar" != "one two three" ]
算術(shù)比較運(yùn)算符
num1 -eq num2        等于        [ 3 -eq $mynum ]
num1 -ne num2        不等于        [ 3 -ne $mynum ]
num1 -lt num2        小于        [ 3 -lt $mynum ]
num1 -le num2        小于或等于        [ 3 -le $mynum ]
num1 -gt num2        大于        [ 3 -gt $mynum ]
num1 -ge num2        大于或等于        [ 3 -ge $mynum ]
6.while語(yǔ)句

  1. $ X=1

  2. $ while [ $x -le 10 ]

  3. > do

  4. >   echo hello X is $X

  5. >   let X=X+1

  6. > done
復(fù)制代碼

未完待續(xù)。。。。。期待大家完善http://wt.tjhdjyzx.com/cms

[ 本帖最后由 yangprc 于 2007-6-4 06:56 編輯 ]

評(píng)分

參與人數(shù) 1可用積分 +2 收起 理由
waker + 2

查看全部評(píng)分

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2006-10-09 14:35 |只看該作者
不錯(cuò),期待下文

論壇徽章:
1
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-13 06:20:00
3 [報(bào)告]
發(fā)表于 2006-10-09 15:08 |只看該作者
bash中的for循環(huán)有幾種方式:
1.for name [ in word ] ; do list ; done
2.for (( expr1 ; expr2 ; expr3 )) ; do list ; done//注意有2層括號(hào)

其中l(wèi)ist簡(jiǎn)單說(shuō)就是一串由操作符(operator ;、&、&&、||)分隔開(kāi)的管道(pipeline)序列,詳情參看man bash
各給出一個(gè)簡(jiǎn)單例子:

  1. 1.
  2. for filename in `ls`
  3. do
  4. cat $filename
  5. done

  6. 2.
  7. for((i=0; i<10; i++))
  8. do
  9. echo $i
  10. done
復(fù)制代碼

[ 本帖最后由 yangprc 于 2006-10-9 15:37 編輯 ]

論壇徽章:
1
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-13 06:20:00
4 [報(bào)告]
發(fā)表于 2006-10-09 15:28 |只看該作者
1.條件變量替換:
Bash Shell可以進(jìn)行變量的條件替換,既只有某種條件發(fā)生時(shí)才進(jìn)行替換,替換
條件放在{}中.
(1) ${value:-word}
當(dāng)變量未定義或者值為空時(shí),返回值為word的內(nèi)容,否則返回變量的值.
(2) ${value:=word}
與前者類似,只是若變量未定義或者值為空時(shí),在返回word的值的同時(shí)將
word賦值給value
(3) ${valuemessage}
若變量以賦值的話,正常替換.否則將消息message送到標(biāo)準(zhǔn)錯(cuò)誤輸出(若
此替換出現(xiàn)在Shell程序中,那么該程序?qū)⒔K止運(yùn)行)
(4) ${value:+word}
若變量以賦值的話,其值才用word替換,否則不進(jìn)行任何替換
(5) ${valueffset}
${valueffset:length}
從變量中提取子串,這里offset和length可以是算術(shù)表達(dá)式.
(6) ${#value}
變量的字符個(gè)數(shù)
(7) ${value#pattern}
${value##pattern}
去掉value中與pattern相匹配的部分,條件是value的開(kāi)頭與pattern相匹配
#與##的區(qū)別在于一個(gè)是最短匹配模式,一個(gè)是最長(zhǎng)匹配模式.
( ${value%pattern}
${value%%pattern}
于(7)類似,只是是從value的尾部于pattern相匹配,%與%%的區(qū)別與#與##一樣
(9) ${value/pattern/string}
${value//pattern/string}
進(jìn)行變量?jī)?nèi)容的替換,把與pattern匹配的部分替換為string的內(nèi)容,/與//的區(qū)
別與上同

注意:上述條件變量替換中,除(2)外,其余均不影響變量本身的值


2.變量的算術(shù)運(yùn)算
在Bash Shell中,只能進(jìn)行兩個(gè)整數(shù)間的運(yùn)算,其結(jié)果仍為整數(shù).要進(jìn)行算術(shù)
運(yùn)算,需要使用let命令,語(yǔ)法為:
let expr
expr是一個(gè)包含項(xiàng)和操作符的表達(dá)式,項(xiàng)可以是一個(gè)變量或是一個(gè)整數(shù)常數(shù),
當(dāng)使用整數(shù)常數(shù)時(shí),其默認(rèn)為十進(jìn)制整數(shù),用戶可以用radio#number來(lái)指定其它
形式的整數(shù),其中radio定義了整數(shù)是幾進(jìn)制表示的,number是該整數(shù)的值.若
radio>10,那么數(shù)字字符可從0-9和A-Z.
在表達(dá)式中支持的操作符及其含義為:
+,-,*,/,% 加,減,乘,除,取模
>>,<<,&,^,| 左移,右移,位與,位異或,位或
?: 三元運(yùn)算符.與C語(yǔ)言中的定義一致
~ 取補(bǔ)碼
!,>=,<=,>,<,==,!=,&&,||
=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
表達(dá)式式中也可以使用括號(hào).括號(hào)或運(yùn)算優(yōu)先級(jí)的定義與一般計(jì)算機(jī)語(yǔ)言中的
相同.
let命令具有返回值.當(dāng)計(jì)算結(jié)果(若有多個(gè)表達(dá)式時(shí),以最后一個(gè)為準(zhǔn))為0時(shí),
返回值為1,否則為0.
當(dāng)表達(dá)式中含有shell的特殊字符(如|)時(shí),需要用引用符('或"將其引用起來(lái).
使用let時(shí)還需要注意的時(shí),對(duì)于let x+y這樣的式子,shell雖然計(jì)算了x+y的值
但卻將結(jié)果丟棄,若不想這樣,可以使用let sum=x+y將x+y的結(jié)果保存在變量sum中
另外還可以使用((和))操作符取代let命令,而且這樣的話,還可以省去對(duì)算術(shù)
表達(dá)式的引用,如果想返回表達(dá)式的值,則需用$(())的格式

論壇徽章:
1
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-13 06:20:00
5 [報(bào)告]
發(fā)表于 2006-10-09 15:29 |只看該作者
使用set命令可以設(shè)置各種shell選項(xiàng)或者列出shell變量.單個(gè)選項(xiàng)設(shè)置常用的特性.
在某些選項(xiàng)之后-o參數(shù)將特殊特性打開(kāi).在某些選項(xiàng)之后使用+o參數(shù)將關(guān)閉某些特性,
不帶任何參數(shù)的set命令將顯示shell的全部變量.除非遇到非法的選項(xiàng),否則set總是
返回ture.
當(dāng)BASH shell被調(diào)用時(shí),可以列出全部的選項(xiàng).當(dāng)前的選項(xiàng)集列在$-中.在option參數(shù)
被處理后,其他的參數(shù)被賦值到位置參數(shù)中($1,$2,...,$n)

set [--abefhkmnptuvxldCHP] [-o option name] [arguments ...]


源碼:


選項(xiàng) 說(shuō)明
-a 自動(dòng)向已經(jīng)修改的變量或?yàn)閷?dǎo)出后序命令的變量作出標(biāo)志
-b 不是在原提示符之前,而是立即引發(fā)終止后臺(tái)任務(wù)的狀態(tài)表表
-e 如果命令帶非零值返回,立即退出
-f 禁止帶擴(kuò)展名的路徑
-h 定義函數(shù)時(shí),定位和存儲(chǔ)函數(shù)命令,當(dāng)函數(shù)被執(zhí)行時(shí),通常查詢
函數(shù)命令
-k 所有的關(guān)鍵詞參數(shù),而不只是那些命令名前的關(guān)鍵詞參數(shù),被放
在環(huán)境命令中
-m 監(jiān)視器模式,啟動(dòng)任務(wù)控制.此選項(xiàng)默認(rèn)支持系統(tǒng)shell交互.后
臺(tái)進(jìn)程以單獨(dú)的進(jìn)程組運(yùn)行,在每次完成任務(wù)時(shí)顯示包含退出的
狀態(tài)行
-n 讀取命令但不執(zhí)行命令.通常監(jiān)查shell腳本的句法錯(cuò)誤.交互
shell被忽略

-o option-name 選項(xiàng)名可以是下列之一:
選項(xiàng) 說(shuō)明
allexport 同-a選項(xiàng)
braceexpand shell執(zhí)行花括號(hào)擴(kuò)展,在默認(rèn)情況下起作用
emacs 使用emacs風(fēng)格命令行編輯接口.除非shell以-noline-editing
選項(xiàng)啟動(dòng),否則當(dāng)shell交互時(shí),通過(guò)默認(rèn)啟動(dòng)該選項(xiàng)
errexit 同-e選項(xiàng)
histexpand 同-H選項(xiàng)
ignoreeof 其結(jié)果是好像shell命令I(lǐng)GNOREEOF=10被執(zhí)行
interactive 允許單詞前帶#號(hào),以使得在交互shell中忽略命令行的全部字符
-commands
monitor 同-m選項(xiàng)
noclobber 同-C選項(xiàng)
noexec 同-n選項(xiàng)
noglob 同-f選項(xiàng)
nohash 同-d選項(xiàng)
notify 同-b選項(xiàng)
nounset 同-u選項(xiàng)
physical 同-p選項(xiàng)
posix 改變BASH屬性以匹配標(biāo)準(zhǔn),默認(rèn)操作不同于POSIX1003.2標(biāo)準(zhǔn)
verbose 同-v選項(xiàng)
vi 使用vi風(fēng)格的命令行編輯器
XTRACE 同-x選項(xiàng),如果沒(méi)有給出選項(xiàng)名,顯示當(dāng)前選項(xiàng)值
-p 打開(kāi)特權(quán)模式(在此模式,$ENV文件被處理,不能從環(huán)境中繼承
shell函數(shù).如果是有效用戶ID而不是實(shí)用戶組則自動(dòng)啟動(dòng).關(guān)閉
此選項(xiàng)將使得有效用戶和組IDs設(shè)置實(shí)用戶和組IDs)
-t 在讀取命令并執(zhí)行之后退出
-u 當(dāng)執(zhí)行參數(shù)括展時(shí),把非設(shè)置變量作為錯(cuò)誤處理(如果擴(kuò)展企圖
出現(xiàn)在非設(shè)置變量中,shell顯示錯(cuò)誤信息.如果不是交互式,則
帶非凌值退出)
-v 輸入行被讀取時(shí),顯示shell輸入行
-x 在每個(gè)簡(jiǎn)單命令被擴(kuò)展之后,顯示PS4擴(kuò)展值,之后是要執(zhí)行的命令
-l 保存和恢復(fù)綁定在命令中的名稱
-d 禁止執(zhí)行查找散列命令(通常,命令被保存在散列表中,一旦被找到
就不再繼續(xù)查找)
-C 效果好像是執(zhí)行了noclobber=shell命令
-H 使用!風(fēng)格的歷史替代(當(dāng)shell交互時(shí),在默認(rèn)情況下,此選項(xiàng)有效)
-P 如果設(shè)置此參數(shù),當(dāng)執(zhí)行改變目錄命令cd時(shí),不遵循符號(hào)鏈接,而是
使用實(shí)際的目錄
-- 如果在選項(xiàng)后沒(méi)有參數(shù),不設(shè)置位置參數(shù).否則,即使一些參數(shù)以a
選項(xiàng)開(kāi)始,也要把位置參數(shù)設(shè)置為argument
- 結(jié)束選項(xiàng)的信號(hào),將引發(fā)其余的參數(shù)被賦值到位置參數(shù)中(-x和-v
選項(xiàng)被關(guān)閉.如果沒(méi)有argument,位置參數(shù)將保留未改變的參數(shù))

論壇徽章:
1
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-13 06:20:00
6 [報(bào)告]
發(fā)表于 2006-10-09 15:36 |只看該作者
函數(shù)

函數(shù)的使用
BASH 是一個(gè)相對(duì)簡(jiǎn)單的腳本語(yǔ)言,不過(guò)為了方便結(jié)構(gòu)化的設(shè)計(jì),BASH 中也提供了函數(shù)定義的功能。BASH 中的函數(shù)定義很簡(jiǎn)單,只要向下面這樣寫就可以了:
function my_funcname {
 code block
}

或者

my_funcname() {
 code block
}

上面的第二種寫法更接近于 C 語(yǔ)言中的寫法。BASH 中要求函數(shù)的定義必須在函數(shù)使用之前,這是和 C 語(yǔ)言用頭文件說(shuō)明函數(shù)方法的不同。

更進(jìn)一步的問(wèn)題是如何給函數(shù)傳遞參數(shù)和獲得返回值。BASH 中函數(shù)參數(shù)的定義并不需要在函數(shù)定義處就制定,而只需要在函數(shù)被調(diào)用時(shí)用 BASH 的保留變量 $1 $2 ... 來(lái)引用就可以了;BASH 的返回值可以用 return 語(yǔ)句來(lái)指定返回一個(gè)特定的整數(shù),如果沒(méi)有 return 語(yǔ)句顯式的返回一個(gè)返回值,則返回值就是該函數(shù)最后一條語(yǔ)句執(zhí)行的結(jié)果(一般為 0,如果執(zhí)行失敗返回錯(cuò)誤碼)。函數(shù)的返回值在調(diào)用該函數(shù)的程序體中通過(guò) $? 保留字來(lái)獲得。下面我們就來(lái)看一個(gè)用函數(shù)來(lái)計(jì)算整數(shù)平方的例子:

#!/bin/bash

square() {
 let "res = $1 * $1"
 return $res
}

square $1
result=$?
echo $result

exit 0

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2006-10-09 19:19 |只看該作者
不錯(cuò)唉

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2006-10-09 22:02 |只看該作者
雖然我沒(méi)看但寫了這么多還是要花點(diǎn)時(shí)間的
幸苦了 幫著頂一下

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2006-10-10 11:39 |只看該作者
頂頂. 辛苦了.

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2006-10-10 12:04 |只看該作者
最近在考慮如何封裝函數(shù)問(wèn)題
可能作為程序員的習(xí)慣吧....
所以我來(lái)補(bǔ)充二點(diǎn):

1.函數(shù)聲明后的使用域是全局的
(誰(shuí)知道怎么聲明為局部的,希望可以通知我)

2.默認(rèn)情況下變量的聲明也是全局的

3.local語(yǔ)句在函數(shù)內(nèi)部使用作為局部變量,哪怕聲明的變量是數(shù)組
fun()
{
   local -a test
   fun2()
   {
    test[0]=...
    test[1]=...
    }
}

在實(shí)際應(yīng)用過(guò)程中
無(wú)論你怎么調(diào)用,你都無(wú)法獲取test數(shù)組的值
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP