身為一個iOS程式員,雖然iOS相關技術十分重要,但是bash也是不可不瞭解的,因為技能的成長,除了深度,還需要廣度。下麵就來介紹下bash。 Shell是C語言編寫的,所以他是解釋性語言,運行在Linux系統下,在Mac下,一般使用的是bashell。 bashell都是運行在Terminal下, ...
身為一個iOS程式員,雖然iOS相關技術十分重要,但是bash也是不可不瞭解的,因為技能的成長,除了深度,還需要廣度。下麵就來介紹下bash。
Shell是C語言編寫的,所以他是解釋性語言,運行在Linux系統下,在Mac下,一般使用的是bashell。
bashell都是運行在Terminal下,本文的所有腳本也都是運行在Terminal下的。
常用的命令行
pwd //當前路徑 ls -l //列出當前目錄下所有文件 mkdir TestFolder //創建文件夾 touch file.txt file1.txt file2.txt //創建3個文件,空格分隔 ls -l | grep txt | wc -l //列出所有文件,然後查找文件名包含txt的文件,然後計算總共有多少個結果
註:|就是將左邊的結果作為右邊的輸入
man command //man後面接命令則顯示該命令的所有幫助信息,再輸入q則返回 history //顯示之前輸入的所有歷史信息 clear //清空所有行 du 文件 //顯示文件大小 cat 文件 //顯示文件內容 less 文件 //分頁顯示文件內容,適合大文件 cp 文件 新文件 //複製文件到新文件 mv 文件 目錄 //移動文件到目錄 rm 文件1 文件2 文件3 //刪除文件1,文件2,文件3 rm -rf /* 或者 rm -rf / //刪除所有文件,千萬不要執行這一句!!!!!千萬不要!!!! sudo su //成為root用戶 chomd +x 文件 //給文件執行許可權,在做shell的時候十分有用
wc -m << END //從鍵盤讀入數據並統計讀入數據的大小,以END符號來結束 ps -ef //顯示所有進程列表 top //顯示進程動態列表 kill 進程PID //結束一個進程 tar -cvf archive.tar file1.txt file2.txt file3.txt //歸檔 tar -xvf tutorial.tar //解檔 gzip tutorial.tar //壓縮 gunzip tutorial.tar.gz //解壓縮 unzip archive.zip //解壓縮
基礎的命令行就介紹到這裡,下麵開始shell
Shell基礎
在介紹shell之前,需要先瞭解vim
輸入vim,然後會進入操作界面,這個操作界面分三種模式:互動式,插入式,命令式。其中互動式和命令式我個人覺得比較接近,都是通過命令來作為輸入,區別是命令式需要先輸入:
我們先輸入
vim 文件 //一般以.sh結尾,你用txt結尾也可以 然後按下i,就進入插入模式了,就可以開始寫shell了
我們輸入一些代碼來分別講講基礎shell語法:
#指明運行shell的解釋器 #!/bin/bash #輸出文本 echo "your name" #格式化方式輸入文本 printf "%d %s" 123 "abcds" #從鍵盤輸入 read PERSON #列印輸入的內容 echo "hello $PERSON" #val是變數,expr是運算符,反引號表示val可以將內容先存到記憶體中,以後使用再將結果從記憶體中讀出來;等號左右都不能有空格,expr後面空格不能少 val=`expr 2 + 2` #$引用變數,雙引號和單引號用法相同,不過如果含有變數,要用雙引號 echo "value : $val" #if語法,空格不能少;eq表示相等,fi表示if結束 if [ 10 -eq 100 ] then echo "equal" else echo "not equal" fi file="test.sh" #-f 表示是否普通文件 if [ -f $file ] then echo "ordinary file" else echo "not ordinary file" fi string="79838924kfdsldjslfjdslfs" #字元串長度 echo ${#string} #字元串第1到5位,輸出98389 echo ${string:1:5} name[0]="a" name[1]="b" name[2]="c" #列印數組name的成員 echo ${name[*]} length=${#name[*]} #列印數組長度 echo "array length is $length" #for語法,./*是當前目錄所有文件,mm表示迴圈體內單個文件 for mm in ./* do echo $mm done count=0 #while語法結構, -lt表示less than while [ $count -lt 5 ] do count=`expr $count + 1` echo $count done #case語法結構 aNum=1 case $aNum in 1) echo 'abc' ;; *) echo 'default' ;; esac #shell函數,帶參數的寫法,$1表示第一個參數,$2表示第二個 #註意,$10 不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數 functionWithParam(){ echo "first param $1" echo "second param $2" return 123 } #函數傳參 functionWithParam 1 2 #獲取函數返回值 ret=$? echo $ret #$# 傳遞給函數的參數個數 #$* 顯示所有傳遞給函數的參數 #接收.sh的第一個參數 option="${1}"
當這些腳本都輸入完畢以後,按下esc鍵,然後輸入:wq 表示保存並退出vim的意思
然後輸入:
chmod +x test.sh //給sh文件以執行許可權
./test.sh //開始執行腳本 ./為執行路徑,如果你的腳本放在/bin, /sbin, /usr/bin,/usr/sbin等PATH里,才可以省略./
如果想要調試執行,則輸入:
bash -x test.sh
基本的命令行和基本的bash就介紹到這裡
參考文章:
http://www.jianshu.com/p/7c3a4f56f671
http://c.biancheng.net/cpp/view/6994.html