日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SH脚本学习总结

發(fā)布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SH脚本学习总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、腳本開頭

??????????????? #!/bin/bash或者#!/bin/sh

二者區(qū)別

sh:Bourne shell(sh) 是 UNIX 最初使用的shell,并且在每種 UNIX 上都可以使用, 在 shell 編程方面相當(dāng)優(yōu)秀,但在處理與用戶的交互方面做得不如其他幾種shell。

bash: Linux 操作系統(tǒng)缺省的 shell 是Bourne Again shell,它是 Bourne shell 的擴展,簡稱 Bash,與 Bourne shell 完全向后兼容,并且在Bourneshell 的基礎(chǔ)上增加、增強了很多特性。Bash放在/bin/bash中,它有許多特色,可以提供如命令補全、命令編輯和命令歷史表等功能,它還包含了很多 C shell 和 Korn shell 中的優(yōu)點,有靈活和強大的編程接口,同時又有很友好的用戶界面。

2、注釋

?? 2.1 #單行注釋

?? 2.2多行注釋

????? 方法A

? ? ? ?

? ? ? ?如果注釋中有反引號的命令就會報錯,反引號部分不會被注釋掉,例如 var=`ls -l` 就不會被注釋掉。? ? ? ?

? ? ? ?方法B(避免反引號報錯)

? ? ? ?

3、變量定義

3.1直接定義

??? java_home="/opt/Oracle/java"

3.2 變量傳遞

??? java_bin=$java_home/bin或者java_bin=${java_home}/bin

3.3 參數(shù)傳遞

??version=$1

?????? 說明:$0代表sh運行命令的第一個參數(shù),即該sh文件的全名

???????????? $1代表sh運行命令的第二個參數(shù)

變量說明

$$ Shell本身的PID(ProcessID)
$! Shell最后運行的后臺Process的PID
$? 最后運行的命令的結(jié)束代碼(返回值)
$- 使用Set命令設(shè)定的Flag一覽
$* 所有參數(shù)列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數(shù)。
$@ 所有參數(shù)列表。如"$@"用「"」括起來的情況、以"$1" "$2" …"$n" 的形式輸出所有參數(shù)。
$# 添加到Shell的參數(shù)個數(shù)
$0 Shell本身的文件名
$1~$n添加到Shell的各參數(shù)值。$1是第1參數(shù)、$2是第2參數(shù)…。

舉例:

sh test.sh aabb

echo"number:$#"?? #輸出number:2
echo "scname:$0" #輸出scname:test.sh
echo "first :$1"? #輸出first:aa
echo "second:$2"? #輸出second:bb
echo "argume:$@"? #輸出argume:aa bb

擴展:

$*和$@的區(qū)別:

$*實例


$@實例

4、函數(shù)定義

??? 函數(shù)名(){

?????? 函數(shù)體

??? }

??? 舉例:

??? usage(){

??????? echo"usage:sh $0 pkg_version"

??????? echo"example:sh deploy_ciitc.sh V1.0.0B03_20160416_03-56-09"

??????? exit 1

??? }

??? 函數(shù)調(diào)用

??? 直接寫函數(shù)名,舉例:

??? if [ $# -ne 1];then

? ????usage

? ????exit 1

??? fi

5、單引號、雙引號、反引號與反斜杠

?? 5.1單引號 ('' )?

# grep Susan phonebook?
Susan Goldberg 403-212-4921?
Susan Topple 212-234-2343?
如果我們想查找的是Susan Goldberg,不能直接使用grep Susan Goldberg phonebook命令,grep會把Goldbergphonebook當(dāng)作需要搜索的文件?
# grep 'Susan Gold' phonebook?
Susan Goldberg 403-212-4921?
當(dāng)shell碰到第一個單引號時,它忽略掉其后直到右引號的所有特殊字符?

5.2 雙引號 (" " )?

雙引號作用與單引號類似,區(qū)別在于它沒有那么嚴(yán)格。單引號告訴shell忽略所有特殊字符,而雙引號只要求忽略大多數(shù),具體說,括在雙引號中的三種特殊字符不被忽略:$,\,` ,即雙引號會解釋字符串的特別意思,而單引號直接使用字符串.如果使用雙引號將字符串賦給變量并反饋它,實際上與直接反饋變量并無差別。如果要查詢包含空格的字符串,經(jīng)常會用到雙引號。?
# x=*?
# echo $x?
hello.sh menus.sh misc.sh phonebook tshift.sh?
# echo '$x'?
$x?
# echo "$x"?
*?
這個例子可以看出無引號、單引號和雙引號之間的區(qū)別。在最后一種情況中,雙引號告訴shell在引號內(nèi)照樣進(jìn)行變量名替換,所以shell$x替換為*,因為雙引號中不做文件名替換,所以就把*作為要顯示的值傳遞給echo。對于第一種情況需要進(jìn)一步說明,shell在給變量賦值時不進(jìn)行文件名替換(這從第三種情況中也能看出來),各步驟發(fā)生的精確次序如下: shell掃描命令行,把x的值設(shè)為星號*;?
shell
再次掃描命令行,碰到星號*,把它替換成當(dāng)前目錄下的文件清單;?
shell
啟動執(zhí)行echo命令,把文件清單作為參數(shù)傳遞給echo.?
這個賦值的先后次序非常重要:shell先作變量替換,然后作文件名替換,最后把這行處理為參數(shù)?

5.3 反引號(``)?

命令替換是指shell能夠?qū)⒁粋€命令的標(biāo)準(zhǔn)輸出插在一個命令行中任何位置。shell中有兩種方法作命令替換:把shell命令用反引號或者$(...)結(jié)構(gòu)括起來,其中,$(...)格式受到POSIX標(biāo)準(zhǔn)支持,也利于嵌套。?
# echo The date and time is `date`?
The date and time is
6 1506:10:35 CST 2005?
# echo Your current working directory is $(pwd)?
Your current working directory is/home/howard/script?

5.4 反斜杠backslash-escaped( \ )?

反斜杠一般用作轉(zhuǎn)義字符,或稱逃脫字符,linux如果echo要讓轉(zhuǎn)義字符發(fā)生作用,就要使用-e選項,且轉(zhuǎn)義字符要使用雙引號?
echo -e "\n"?
反斜杠的另一種作用,就是當(dāng)反斜杠用于一行的最后一個字符時,shell把行尾的反斜杠作為續(xù)行,這種結(jié)構(gòu)在分幾行輸入長命令時經(jīng)常使用。

?????? \n???表示新的一行
??? \r???表示回車
??? \t???表示水平制表符
??? \v???表示垂直制表符
??? \b???表示后退符
??? \a???表示"alert"(蜂鳴或者閃爍)
??? \0xx?轉(zhuǎn)換為八進(jìn)制的ASCII碼

擴展:

1echo -e "\n"?等同于echo $'\n'?????????#?新行

2ssh root@172.20.11.13 'cd$batch_ws_pkg_path;[ -f $batch_ws_pkg ] && echo "batch ws? pkg find" || echo "batch ws? pkg not find" && exit 1 '

命令解釋:登錄172.20.11.13,并且在機器上執(zhí)行''內(nèi)部的命令-----切換目錄,成功后,判斷目錄如果存在,打印batch ws?pkg find否則打印batch ws?pkg not find并退出

?

6、邏輯判斷

6.1 IF語句

常用判斷:

擴展:


6.2Case語句

case條件語句:

?? 語法: case 條件 in

????????? xxx)

????????? commands;;

????????? xxx)

????????? commands;;

????????? xxx)

????????? commands;;

????????? esac

?

?? 說明:這個esac 就是case的結(jié)束,想if...fi 一樣的,

???????? 注意commands;;中的“;;”不能少掉。

實例:

6、特殊簡寫命令

7循環(huán)

? 7.1 for循環(huán)

語法:for? 變量? in?? 列表
?????do
????????操作~~~~
????? done

??說明:變量是在當(dāng)前循環(huán)實用,用來替代當(dāng)前列表的對象。
?????列表:循環(huán)中所要操作的對象,可以是字符串,文件名等。

實例:

??

擴展:for循環(huán)的其他寫法--注:對于固定次數(shù)的循環(huán),可以通過seq命令來實現(xiàn),就不需要變量的自增了;這里的C語言for循環(huán)風(fēng)格是挺熟悉的吧。

??

7.2 while循環(huán)

??? 語法: while? [ 表達(dá)式 ]

???????????????? do

???????????????? 操作......

?????????????? ??done

?

???? 說明:只要表達(dá)式成立,就將一直循環(huán)下去。

?????????? [] ? 表達(dá)式?之間要有空格,最好在與操作符前后也加上空格

?????????? 先判斷表達(dá)式的true還是falsetrue時候,在執(zhí)行里面的語句。

???? 實例:

??

7.3 until循環(huán)

??? 語法:until? [表達(dá)式]

???????????????? do

???????????????? 操作......

???????????????? done

????

?? 說明: untilwhile正好相反, until是如果表達(dá)式不成立則執(zhí)行里面的操作,直到表達(dá)式成功后結(jié)束。

?? 實例:

?

轉(zhuǎn)載于:https://blog.51cto.com/4443915/1788658

總結(jié)

以上是生活随笔為你收集整理的SH脚本学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。