任何編程語言,常用的語法和代碼結構其實不多的,如果為了快速的掌握入手一門編程語言,我認為只需要把該語言的常見語法和代碼記下來,再結合實際需求去拼接成新的代碼。這篇博客主要是記錄bash shell的一些用法,便于日后復習。所以這篇博客不會一次性寫完的,會不斷更新新的例子進來。
shell不是具體哪一款程序,它是一類程序的統稱,這些程序只要能夠按照用戶的要求去調用操作系統的接口,就可以稱之為shell程序。常用shell程序有:bash, csh, tcsh, zsh等。
當我們在linux內打開一個terminal,此時就開啟了一個shell程序供我們與操作系統進行交互。可以設置具體是開啟了哪一款shell程序。
1. 列出當前linux系統安裝的所有shell
在terminal內執行:cat /etc/shells,結果如下:
linux系統中當前安裝的所有shell的列表存儲在系統的/etc文件夾的"shells"文件中。默認情況下它具有只讀權限,并且每當我們在系統中安裝新shell時都會自動修改它。
2. 查看當前使用的shell
在terminal內執行:echo $SHELL,結果如下圖:
3. 查看bash的手冊
在terminal內執行:man bash
4. 定義變量和使用變量
變量名不需要聲明,直接這樣寫:variable_name=variable_value。使用變量需要用$放在variable_name前就行,比如:
var="define variable"
echo $var
5. 注釋
單行注釋使用#號
多行注釋可以通過在<< COMMENT和COMMENT之間加上注釋
# echo $var
< < comment
export var
test comment
echo "somethin"
comment
6. Bash腳本第一行
Bash腳本文件的第一行必須是:#!/bin/bash。#!稱為shebang,該行的其余部分是解釋器的路徑,用于指定bash shell在操作系統中的位置。
She Bang(#!)是一個字符序列,由腳本開頭的符號(#)和感嘆號(!)組成。在類似Unix的操作系統下,當帶有shebang的腳本作為程序運行時,程序加載器會將第一行的其余行解析為解釋器指令。因此,SheBang表示執行腳本行的解釋器,并且它被稱為執行各種腳本(如Bash,Python等)的路徑指令。
shebang的格式很重要,格式不正確會導致命令工作不正常。因此,在創建腳本時,要始終記住SheBang格式的這兩點:
- 它應該始終在腳本的第一行。
- 在#!和解釋器的路徑之間,#之前不應有任何空格。
7. 字符串和引號
Bash使用空格來確定單獨的項目,引號可用于處理帶有空格字符的文本。引號分為單引號和雙引號。使用簡單的文本和字符串時,使用單引號和雙引號沒任何區別。但如果需要對shell變量擴展,則只能使用雙引號。如果在單引號中使用變量,則不會將其視為變量。例子如下:
Bash script:
var="define variable"
echo "The value is $var"
echo 'The value is $var'
The result is:
The value is define variable
The value is $var
8. Bash變量
變量名可以包含字母、數字和下劃線,并且其名稱只能以字母和下劃線開頭。不能定義以任何數字開頭的變量。Bash變量不必在變量聲明時定義變量的數據類型。Bash變量是無類型的,只需通過分配其值來鍵入變量名稱,它會自動判斷數據類型。如果將數字值分配給變量,它將自動轉為整數工作,如果將字符值分配給該變量,則它將轉為字符串類型。
- 在讀取或打印變量時,需要在變量名前加上美元($)符號;
- 給變量賦值時,省略美元符號($);且變量名稱和值之間的等號(=)兩側不應有空格。
- 變量名稱區分大小寫:x和X視為兩個不同的變量;
- 變量可以放在Bash腳本中的任何地方或命令行中,因為在運行時,Bash會將其替換為其分配的值;
- 不需要使用任何單引號或雙引號來定義具有單個字符串的變量。需要將多個單詞或字符串作為單個項輸入到變量中,需要使用引號。
例子如下:
The bash script:
var="define variable"
echo "The value is $var"
var=123456
echo "The value is $var"
var=variable
echo "The value is $var"
The result is:
The value is define variable
The value is 123456
The value is variable
9. 系統變量和用戶自定義變量
Shell或UNIX系統中都有兩種類型的變量:系統定義的變量和用戶定義的變量。
系統定義的變量是由操作系統本身創建和維護的預定義變量,通常是以大寫字母進行定義的。要了解系統中有哪些系統變量的列表,在命令行或腳本中輸入命令:set,或env,或printenv。例子如下:
The bash script:
echo $BASH
echo $BASH_VERSION
echo $OSTYPE
The result is:
/bin/bash
4.2.46(2)-release
linux
用戶定義的變量是由用戶創建和維護,通常這些變量以小寫形式定義,但不強制,也可以定義成大寫的。第8點已經講過如何定義變量了,這里不說了。
10. 命令行參數
使用命令行參數可以給Bash腳本傳遞參數使腳本更具靈活性。在腳本運行時,以空格見間隔,跟在腳本名稱后面。在Bash中,以下特殊變量會記錄傳遞的參數:
- $0 - 指定要調用的腳本的名稱;
- $1-$9 - 存儲前9個自變量的名稱,或可用作自變量的位置;
- $# - 指定傳遞給腳本的參數總數(計數);
- $* - 通過將所有命令行參數連接在一起來存儲它們;
- $@ - 將參數列表存儲為數組;
- $? - 指定當前腳本的進程ID;
-
- 指定最后一個命令或最近執行過程的退出狀態;
- $! - 顯示最后一個后臺作業的ID;
例子如下:
The script is:
echo 'echo $0 is' $0
echo 'echo $1 is' $1
echo 'echo $2 is' $2
echo 'echo $3 is' $3
echo 'echo $4 is' $4
echo 'echo $5 is' $5
echo 'echo $6 is' $6
echo 'echo $# is' $#
echo 'echo $* is' $*
echo 'echo $@ is' $@
echo 'echo $? is' $?
echo 'echo $$ is' $$
echo 'echo $! is' $!
Run script: > >./test_bash.sh this is the first script
The result is:
echo $0 is ./test_bash.sh
echo $1 is this
echo $2 is is
echo $3 is the
echo $4 is first
echo $5 is script
echo $6 is
echo $# is 5
echo $* is this is the first script
echo $@ is this is the first script
echo $? is 0
echo $$ is 621356
echo $! is
在$@數組里的參數可以傳遞給其它數組并引用。
args=("$@")
echo ${args[0]} ${args[1]} ${args[2]} ${args[3]}
The result is:
this is the first
11. 命令替換
命令替換允許命令的輸出替換命令本身。Bash通過在子shell環境中執行命令并用命令的標準輸出替換命令,并刪除任何尾隨的換行符。常用的命令替換語法為:
語法1:將要替換的命令放在反引號里
variable_name=`command_name`
variable_name=`command_name [option...] argument1 argument2...`
語法2:將要替換的命令放在圓括號里,且以美元符號($)開頭
variable_name=$(command_name)
variable_name=$(command_name [option...] argument1 argument2...)
-
Linux系統
+關注
關注
4文章
591瀏覽量
27356 -
Shell
+關注
關注
1文章
363瀏覽量
23297 -
bash終端
+關注
關注
0文章
7瀏覽量
1991
發布評論請先 登錄
相關推薦
評論