做爲前端有時候仍是會須要用到shell,梳理基本的shell使用方法。php
文件開頭須要註明腳本類型,以便於系統識別怎麼來解析執行。
在通常狀況下,並不區分 Bourne Shell 和 Bourne Again Shell,因此,像 #!/bin/sh,它一樣也能夠改成 #!/bin/bash。前端
#! 告訴系統其後路徑所指定的程序便是解釋此腳本文件的 Shell 程序。 #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch test_$i.txt done
示例解釋
第1行:指定腳本解釋器,這裏是用/bin/sh作解釋器的
第2行:切換到當前用戶的home目錄
第3行:建立一個目錄shell_tut
第4行:切換到shell_tut目錄
第5行:循環條件,一共循環10次
第6行:建立一個test_0…9.txt文件
第7行:循環體結束
mkdir, touch都是系統自帶的程序,通常在/bin或者/usr/bin目錄下。for, do, done是sh腳本語言的關鍵字。java
高級編程語言
理論上講,只要一門語言提供瞭解釋器(而不只是編譯器),這門語言就能夠勝任腳本編程,常見的解釋型語言都是能夠用做腳本編程的,如:Perl、Tcl、Python、PHP、Ruby。Perl是最老牌的腳本編程語言了,Python這些年也成了一些linux發行版的預置解釋器。python
編譯型語言,只要有解釋器,也能夠用做腳本編程,如C shell是內置的(/bin/csh),Java有第三方解釋器Jshell,Ada有收費的解釋器AdaScript。linux
以下是一個PHP Shell Script示例(假設文件名叫test.php):git
#!/usr/bin/php <?php for ($i=0; $i < 10; $i++) echo $i . "\n";
執行:github
/usr/bin/php test.php
或者:shell
chmod +x test.php ./test.php
環境兼容性
若是你的腳本是提供給別的用戶使用,使用sh或者bash,你的腳本將具備最好的環境兼容性,perl很早就是linux標配了,python這些年也成了一些linux發行版的標配,至於mac os,它默認安裝了perl、python、ruby、php、java等主流編程語言。編程
定義變量
定義變量時,變量名不加美圓符號($),如:ruby
your_name="qinjx"
注意,變量名和等號之間不能有空格,這可能和你熟悉的全部編程語言都不同。
除了顯式地直接賦值,還能夠用語句給變量賦值,如:
for file in `ls /etc`
使用變量
使用一個定義過的變量,只要在變量名前面加美圓符號便可,如:
your_name="qinjx" echo $your_name echo ${your_name}
變量名外面的花括號是可選的,加不加都行,加花括號是爲了幫助解釋器識別變量的邊界,好比下面這種狀況:
for skill in Ada Coffe Action Java; do echo "I am good at ${skill}Script" done
若是不給skill變量加花括號,寫成echo "I am good at $skillScript",解釋器就會把$skillScript當成一個變量(其值爲空),代碼執行結果就不是咱們指望的樣子了。
推薦給全部變量加上花括號,這是個好的編程習慣。IntelliJ IDEA編寫shell script時,IDE就會提示加花括號。
字符串
字符串是shell編程中最經常使用最有用的數據類型,字符串能夠用單引號,也能夠用雙引號,也能夠不用引號。單雙引號的區別跟PHP相似。
單引號
str='this is a string'
單引號字符串的限制:
單引號裏的任何字符都會原樣輸出,單引號字符串中的變量是無效的
單引號字串中不能出現單引號(對單引號使用轉義符後也不行)
雙引號
your_name='qinjx' str="Hello, I know your are \"$your_name\"! \n"
雙引號裏能夠有變量
雙引號裏能夠出現轉義字符
字符串操做
拼接字符串
your_name="qinjx" greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1
獲取字符串長度:
string="abcd" echo ${#string} #輸出:4
提取子字符串
string="alibaba is a great company" echo ${string:1:4} #輸出:liba
查找子字符串
string="alibaba is a great company" echo `expr index "$string" is`#輸出:3,這個語句的意思是:找出字母i在這名話中的位置,要在linux下運行,mac下會報錯