菜鳥教程之學習Shell script筆記(上)

菜鳥教程之學習Shell script筆記

如下內容是,學習菜鳥shell教程整理的筆記
菜鳥教程之shell教程:http://www.runoob.com/linux/linux-shell.htmlphp

Shell簡介

Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程序設計語言。
Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶經過這個界面訪問操做系統內核的服務。
Shell腳本(shell script),是一種shell編寫的腳本程序。
業界所說的shell一般是指shell腳本,可是shell和shell script是兩個不一樣的概念。shell包括shell script和開發shell自己。通常實際生產操做過程當中用的是shell編程,編寫特定功能的shell script用來解決實際問題。html

Shell環境

Bash:Bourne Again Shell (free and simple to use)
Bash是大多數Linux使用的system默認shell
通常狀況下並不區分Bourne Shell 和 Bourne Again Shell,因此像#!/bin/sh 能夠改成#!/bin/bash,#! 告訴系統其後路徑指定的程序便是解釋此腳本文件的shell程序。linux

Shell命令

  • $ echo "hello world" #輸出命令
  • 運行shell腳本的兩種方法:
    ./test.sh
    /bin/sh test.sh or /bin/php test.php #直接以解釋器運行,就不須要在第一行指定解釋器信息。shell

    Shell變量

  • 和C語言的命名規則差很少,須要注意的是,不能使用標點符號,不能使用bash裏的關鍵字(可用help命令查看保留的關鍵字)
  • 定義使用變量
    your_name="xxx"
    echo $your_name
    echo ${your_name} #變量名後面的花括號用來明確變量的邊界
  • 只讀變量
    使用readonly命令能夠將變量變爲只讀變量
    readonly xxx
  • 刪除變量
    unset xxx #unset 命令不能刪除只讀變量編程

    Shell字符串

    字符串可用用單引號,也可用雙引號,亦能夠不用引號
  • str='this is a string'
    your_name='runoob'
    雙引號裏面能夠有變量,能夠出現轉義字符
  • 拼接字符串:
your_name="shell"  
# 使用雙引號拼接  
greeting="hello, "$your_name" !"  
greeting_1="hello,${your_name} !"
echo $greeting $greeting_1
# 使用單引號拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
  • 輸出結果
hello, shell ! hello, shell !
hello, shell ! hello, ${your_name} !
  • 獲取字符串長度
string="abcd"
echo ${#string} #在字符串前面加#就能夠實現
  • 提取子字符串
    從第2個字符開始截取4個字符
string="shell is great"
 echo ${string:1:4} #輸出 hell
  • 查找子字符串
    用 expr index 實現
    查找字符i或a的位置(哪一個字母先出現就計算哪一個)
string="shell is great"
echo `expr index "$string" io` # 輸出 7 (空格也算字符)

Shell數組

bash支持一維數組(不支持多維數組),而且沒有限定數組的大小。數組

  • 定義數組
數組名={value0 value1 valuue2....} or array_name=(
    value0
    value1
    value2
    value3
) #也能夠單獨定義:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
  • 讀取數組
通常格式:${數組名[下標]}
vuluen=${array_name[n]}
使用@符號能夠讀取數組中全部的元素
echo ${array_name[@]}
  • 獲取數組的長度
# 取得數組元素的個數
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得數組單個元素的長度
length=${#array_name[n]}
  • Shell註釋
    用#號實現單行註釋
    用:<<EOF .... EOF 實現多行註釋,EOF 能夠換成其它字母 如‘ or !bash

    Shell傳遞參數

#!/bin/bash
echo "Shell 傳遞參數實例!"
echo "執行的文件名:$0";
echo "第一個參數爲:$1";
echo "第二個參數爲:$2";
echo "第三個參數爲:$3";
eg:./test.sh 1 2 3

只會傳遞存在的參數個數,若是輸入的是./test.sh 1 2 3 4 則4不會被輸出編程語言

$# $* $@ 的做用及區別
#!/bin/bash
echo "Shell傳遞參數實例!";
echo "第一個參數爲:$1";
echo "參數個數爲:$#";
echo  "傳遞的參數做爲一個字符串顯示:$*";
echo "-- \$* 演示 --";
for i in "$*"; do
    echo $i
done
echo "-- \$@ 演示 --";
for i in "$@"; do
    echo $i
done

執行腳本,輸出結果以下所示:
Shell 傳遞的參數實例!
執行的文件名:./test.sh
第一個參數爲:1
第二個參數爲:2
第三個參數爲:3
參數個數是:3
傳遞的參數做爲一個字符串顯示:1 2 3
--$* 演示 --
1 2 3
-- $@ 演示 --
1
2
3

$*與$@區別:只有在雙引號中體現出來。假設在腳本運行時寫了三個參數 一、二、3,,則 " * " 等價於 "1 2 3"(傳遞了一個參數),而 "@" 等價於 "1" "2" "3"(傳遞了三個參數)
  • $$ :腳本運行的當前進程ID號
  • $- :顯示Shell使用的當前選項,與set命令功能相同
  • $? :顯示最後命令退出的狀態 0表示沒有錯誤 其餘任何值代表有錯誤
  • Linux set命令用於設置shell set指令能設置所使用shell的執行方式,可依照不一樣的需求來作設置。語法:set [+-abCdefhHklmnpPtuvx] -a  標示已修改的變量,以供輸出至環境變量。
    -b  使被停止的後臺程序馬上回報執行狀態。
    -C  轉向所產生的文件沒法覆蓋已存在的文件。
    -d  Shell預設會用雜湊表記憶使用過的指令,以加速指令的執行。使用-d參數可取消。
    -e  若指令傳回值不等於0,則當即退出shell。
    -f   取消使用通配符。
    -h  自動記錄函數的所在位置。
    -H Shell  可利用"!"加 <指令編號> 的方式來執行history中記錄的指令。
    -k  指令所給的參數都會被視爲此指令的環境變量。
    -l  記錄for循環的變量名稱。
    -m  使用監視模式。
    -n  只讀取指令,而不實際執行。
    -p  啓動優先順序模式。
    -P  啓動-P參數後,執行指令時,會以實際的文件或目錄來取代符號鏈接。
    -t  執行完隨後的指令,即退出shell。
    -u  當執行時使用到未定義過的變量,則顯示錯誤信息。
    -v  顯示shell所讀取的輸入值。
    -x  執行指令後,會先顯示該指令及所下的參數。
    + <參數>  取消某個set曾啓動的參數。
  • 也能夠在配置文件裏修該Linux shell set
    全局配置文件(都在/etc/目錄下,etc爲environment config縮寫):
    /etc/profile(不推薦修改)——每一個用戶在登陸時都會調用
    /etc/bashrc(推薦在此處設置全局環境變量,只對bash有效)——每一個用戶在bash打開時都會調用
    /etc/paths(推薦在此處配置全局環境變量)——寫法爲一行一個路徑,其餘配置文件中可經過以下形式追加PATH:【export PATH=$PATH:[path1]:[path2]:[path3]……:[pathN] 】

用戶配置文件:(都在~/家目錄下)函數

~/.bash_profile(推薦在此處配置用戶環境變量,只對bash有效)——當前用戶登陸時調用學習

~/.bashrc(推薦在此處配置用戶環境變量,只對bash有效)——當前用戶bash打開時調用

Shell數組

  • 數組中能夠存放多個值。Bash Shell 只支持一維數組(不支持多維數組),初始化時不須要定義數組大小(與 PHP 相似)。
    與大部分編程語言相似,數組元素的下標由0開始。
    Shell 數組用括號來表示,元素用"空格"符號分割開,語法格式以下:
array_name=(value1 value2)
  • 使用下標定義數組
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
  • 讀取數組
${array_name[index]}
  • 使用@ or *能夠獲取數組中的全部元素
#!/bin/bash
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "數組的元素爲:${my_array[*]}"
echo "數組的元素爲:${my_array[@]}"
  • 獲取數組的長度
用${#xxx[* or @]}獲取數組的長度
eg:
#!/bin/bash
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "數組元素個數爲:${#my_array[*]}"
echo "數組元素個數爲:${#my_array[@]}"

$ ./test.sh
數組元素個數爲:4
數組元素個數爲:4
相關文章
相關標籤/搜索