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

Linux中常用的Shell腳本示例
Shell腳本編程實(shí)驗(yàn)
shell腳本常用的調(diào)試方法介紹
【RT-Thread學(xué)習(xí)筆記】bash和dash-shell

Raspberry Pi Bash Shell 腳本簡介

如何在bash shell腳本中接受參數(shù)
BASH shell腳本篇—條件命令

評論