1.
?#-------------------------------------------------------------------------
?9 #?
強烈注意,在賦值的前后一定不要有空格
10 # 如果有空格會發生什么?
11?
12 #? 如果"VARIABLE =value",
13 #????????????? ^
14 #+ 腳本將嘗試運行一個"VARIABLE"的命令,帶著一個"=value"參數.
15?
16 #? 如果"VARIABLE= value",
17 #?????????????? ^
18 #+ script tries to run "value" command with
18 #+ 腳本將嘗試運行一個"value"的命令,帶著
19 #+ the environmental variable "VARIABLE" set to "".
19 #+ 一個被賦成""值的環境變量"VARIABLE".
20 #-------------------------------------------------------------------------
2.
################################Start Script#######################################
?1 #!/bin/bash
?2 #?
"裸體"變量
?3?
?4 echo
?5?
?6 # 變量什么時候是"裸體"的,比如前邊少了$的時候.
?7 # 當它被賦值的時候,而不是被引用的時候.
?8?
?9 # 賦值
10 a=879
11 echo "The value of /"a/" is $a."
12?
13 # 使用let賦值
14 let a=16+5
15 echo "The value of /"a/" is now $a."
16?
17 echo
18?
19 # 在for循環中
20 echo -n "Values of /"a/" in the loop are: "
21 for a in 7 8 9 11
22 do
23?? echo -n "$a "
24 done
25?
26 echo
27 echo
28?
29 # 在read命令狀態中
30 echo -n "Enter /"a/" "
31 read a
32 echo "The value of /"a/" is now $a."
33?
34 echo
35?
36 exit 0
################################End Script#########################################
3.位置參數
就是從命令行中傳進來的參數,$0, $1, $2, $3...
$0就是腳本文件的名字,$1是第一個參數,$2為第2個...,參見[1](有$0的說明),$9
以后就需要打括號了,如${10},${11},${12}...
shift命令重新分配位置參數,其實就是向左移動一個位置.
$1 <--- $2, $2 <--- $3, $3 <--- $4, 等等.
老的$1將消失,但是$0(腳本名)是不會改變的.如果你使用了大量的位置參數,那么
shift命令允許你存取超過10個參數.雖然{}表示法也允許這樣.
例:
#!/bin/sh?
# we have less than 3 arguments. Print the help text:?
if [ $# -lt 3 ] ; then?
cat <?
ren -- renames a number of files using sed regular expressions?
USAGE: ren 'regexp' 'replacement' files...?
EXAMPLE: rename all *.HTM files in *.html:?
ren 'HTM$' 'html' *.HTM?
HELP?
exit 0?
fi?
OLD="$1"?
NEW="$2"?
# The shift command removes one argument from the list of?
# command line arguments.?
shift?
shift?
# $* contains now all the files:?
for file in $*; do?
if [ -f "$file" ] ; then?
newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`?
if [ -f "$newfile" ]; then?
echo "ERROR: $newfile exists already"?
else?
echo "renaming $file to $newfile ..."?
mv "$file" "$newfile"?
fi?
fi?
done?
講解:
這是一個復雜一些的例子。讓我們詳細討論一下。第一個if表達式判斷輸入命令行參數是否小于3個 (特殊變量$# 表示包含參數的個數) 。如果輸入參數小于3個,則將幫助文字傳遞給cat命令,然后由cat命令將其打印在屏幕上。打印幫助文字后程序退出。 如果輸入參數等于或大于3個,我們就將第一個參數賦值給變量OLD,第二個參數賦值給變量NEW。下一步,我們使用
shift命令將第一個和第二個參數從 參數列表中刪除,這樣原來的第三個參數就成為參數列表$*的第一個參數。然后我們開始循環,命令行參數列表被一個接一個地被賦值給變量$file。
接著我 們判斷該文件是否存在,如果存在則通過sed命令搜索和替換來產生新的文件名。然后將反短斜線內命令結果賦值給newfile。這樣我們就達到了我們的目 的:得到了舊文件名和新文件名。然后使用mv命令進行重命名。
4.
通常用
" [ ] "
?
來表示條件測試。
注意這里的空格很重要。
要確保方括號的空格。
?
[ -f "somefile" ]?
:
判斷是否是一個文件
?
[ -x "/bin/ls" ]
?:
判斷/
bin
/ls
是否存在并有可執行權限
?
[ -n "$var" ]
?:
判斷$var
變量是否有值
[ -e "somefile" ]:判斷文件是否存在
[ -d "somefile" ]:判斷是否為文件夾
[ -r "somefile" ]:判斷文件是否可讀
[ -w "somefile" ] :判斷文件是否可寫
[ -x "somefile" ]:判斷文件是否可執行
[ "$a" = "$b" ]
?:
判斷$a
和$a
是否相等
?
5. 雙引號、單引號和反引號(后置引用)
雙引號:
阻止了所有在引號中的特殊字符的重新解釋--包括變量名--但是$,`(后置引用)和/除外.保留$,作為特殊字符的意義,是為了能夠在雙引號中也能夠正常地引用變量("$var")。
使用""來防止單詞分割.[4]如果在參數列表中使用雙引號,將使得雙引號中的參數作為一個參數.即使雙引號中的字符串包含多個單詞(也就是包含空白部分),也不會變為多個參數。
單引號:
單引號操作總體上和""很像,但不允許引用變量.因為$的特殊含義被關閉了.在''中除了',其他
字符都沒有特殊的含義了.所以單引號比雙引號嚴格.?因為即使是/,在''中都被關閉了,所以你想在''中顯示'的含義,將得不到預期的效果.
反引號(后置引用):
命令替換將會重新分配一個命令甚至是多個命令的輸出;:它會將命令的輸出如實地添加到另一個上下文中。使用命令替換的典型形式是使用后置引用(`...`). 后置引用形式的命令(就是被反引號括起來)將會產生命令行文本。
使用后置引用的意義在于:命令的輸出可以被當成傳遞到另一個命令的參數, 或者保存到變量中, 甚至可以用來產生for
循環的參數列表.
例如:
#!/bin/sh
file abc.zip??? #
執行并輸出,但無法將其命令行輸出賦值給一個變量
file_type=`file abc.zip`? #
可執行并把其輸出賦值給變量file_type
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
