1 Shell腳本概述
1.1Shell腳本概述
?Shell腳本是利用 shell 的功能所寫的一個程序。這個程序是使用純文本文件,將一些 shell 的語法與命令(含外部命令)寫在里面,搭配正則表達(dá)式、管道命令與數(shù)據(jù)流重定向等功能
1.2Shell腳本編寫流程
?第一個Shell腳本文件
#!/bin/bash
echo "hello world"
執(zhí)行方式
bash test.sh
source test.sh
./test.sh
2?Shell腳本變量
2.1變量介紹
變量來源于數(shù)學(xué),是計算機(jī)語言中能儲存計算結(jié)果或能表示值的抽象概念。 ?
變量可以通過變量名訪問。在指令式語言中,變量通常是可變的
2.2變量的作用
用來存放系統(tǒng)和用戶需要使用的特定參數(shù)(值) ?
變量名:使用固定的名稱,由系統(tǒng)預(yù)設(shè)或用戶定義 ?
變量值:能夠根據(jù)用戶設(shè)置、系統(tǒng)環(huán)境的變化而變化
2.3變量的命名要求
2.4變量的分類
2.4.1 用戶自定義變量
變量可以再終端中使用,也可以代碼中使用
在shell編程中通常使用全大寫變量,方便識別
$ COUNT=1
變量的調(diào)用:在變量前加$
$ echo $COUNT
Linux Shell/bash從右向左賦值
$Y=y
$ X=$Y
$ echo $X
y
使用unset命令刪除變量的賦值
$ Z=hello
$ echo $Z
hello
$ unset Z
$ echo $Z
取值?
雙引號: 允許通過$符號引用其他變量值(不加引號也一樣echo $COUNT echo "$COUNT")
????????弱引用,其中的變量引用會被替換為變量值
單引號: 禁止引用其他變量值,$視為普通字符
????????強(qiáng)引用,其中的變量引用不會被替換為變量值,而保持源字符串
反撇號: 命令替換,提取命令執(zhí)行后的輸出結(jié)果,``和$(…)作用相同
數(shù)組
#array數(shù)組
a=(1 2 3 4 5)
echo $a:默認(rèn)顯示數(shù)組a的第一個元素
echo ${a[0]} :顯示數(shù)組中第一個元素,以此類推
echo ${a[-1]}: 顯示數(shù)組中最后一個元素
echo ${a[*]} 和echo ${a[@]} :顯示數(shù)組中所有元素
echo ${#a[@]} :顯示數(shù)組中元素的個數(shù)
echo ${a[@]:起始元素id:元素個數(shù)]} :顯示數(shù)組中以起始元素為首的指定個數(shù)的元素(注意:這里起始元素id不能為負(fù)值
unset a[n] 刪除數(shù)組中的第n個元素
unset a 刪除a這個數(shù)組
2.4.2?只讀變量
變量值不允許修改(重新賦值)的情況
無法使用 unset刪除
最快方法重啟
readonly
readonly COUNT=3
2.4.3 位置變量和預(yù)定義變量
$0 與鍵入的命令行一樣,包含腳本文件名
$1,$2,……$9 ${10} 分別包含第一個到第十個命令行參數(shù)
$# 包含命令行參數(shù)的個數(shù)
$@ 包含所有命令行參數(shù):“$1,$2,……$9”
$* 包含所有命令行參數(shù),是一個整體:“$1,$2,……$9”
$? 包含前一個命令的退出狀態(tài)
$$ 包含正在執(zhí)行進(jìn)程的ID號
?示例:
#!/bin/bash
echo $0
echo $1
echo $2
echo $3
echo $#
執(zhí)行
./test.sh 1 2 3 4 5
輸出
./test.sh
1
2
3
5 //一共傳入了5個
?
2.4.4 環(huán)境變量
$USER 表示用戶名稱
$HOME 表示用戶的宿主目錄
$LANG 表示語言和字符集
$PWD 表示當(dāng)前所在工作目錄
$PATH 表示可執(zhí)行用戶程序的默認(rèn)路徑
export可以將變量指定為全局變量
示例
3 Shell語句
3.1 Shell程序
Shell 程序由零或多條shell語句構(gòu)成。 shell語句包括三類:
說明性語句 ?功能性語句 ?結(jié)構(gòu)性語句。
3.2 說明性語句
說明性語句(注釋行)
以#號開始到該行結(jié)束,不被解釋執(zhí)行 注釋行可以出現(xiàn)在程序中的任何位置,既可以單獨(dú)占用一行, 也可以接在執(zhí)行語句的后面. 以#號開始到所在行的行尾部分,都不被解釋執(zhí)行. 例如:
#! /bin/sh
#
# 本程序說明
#
command_1
command_2 # command_2的語句說明
……
# 下面程序段的說明
command_m
……
command_n # command_n語句的說明
……
3.3 功能性語句
read從標(biāo)準(zhǔn)輸入讀入一行, 并賦值給后面的變量,其語法為:
read ?var // 把讀入的數(shù)據(jù)全部賦給var
示例:?
把讀入行中的第一個單詞(word)賦給var1, 第二個單詞賦給var2, ……把其余所有的詞賦給最后一個變量. 如果執(zhí)行read語句時標(biāo)準(zhǔn)輸入無數(shù)據(jù), 則程序在此停留等侯, 直到數(shù)據(jù)的到來或被終止運(yùn)行。? -t 跟隨等待事件 -p 跟隨終端的提示信息 -s輸入不回顯
示例:
算術(shù)運(yùn)算命令expr主要用于進(jìn)行簡單的整數(shù)運(yùn)算,包括加(+)、減(-)、乘(\*)、整除(/)和求模(%)等操作。例如:
$ expr 12 + 5 \* 3
27
$ expr 3 - 8 / 2
-1
$ num=9
$ sum=`expr $num \* 6 `
$ echo $sum
54
示例
?這里+前后需要空格
test語句可測試三種對象: ? ? ? ? ? 字符串 ? ? 整數(shù) ? ? 文件屬性
條件成立輸出0? 條件不成立輸出1
每種測試對象都有若干測試操作符?
字符串測試
s1 = s2 測試兩個字符串的內(nèi)容是否完全一樣
s1 != s2 測試兩個字符串的內(nèi)容是否有差異
-z s1 測試s1 字符串的長度是否為0
-n s1 測試s1 字符串的長度是否不為0
示例:
?注意 加上雙引號減少錯誤,否則會顯示0
整數(shù)測試
a -eq b 測試a 與b 是否相等
a -ne b 測試a 與b 是否不相等
a -gt b 測試a 是否大于b
a -ge b 測試a 是否大于等于b
a -lt b 測試a 是否小于b
a -le b 測試a 是否小于等于b
示例:
文件測試
-e name 測試一個文件是否存在
-d name 測試name 是否為一個目錄
-f name 測試name 是否為普通文件
-L name 測試name 是否為符號鏈接
-r name 測試name 文件是否存在且為可讀
-w name 測試name 文件是否存在且為可寫
-x name 測試name 文件是否存在且為可執(zhí)行
-s name 測試name 文件是否存在且其長度不為0
f1 -nt f2 測試文件f1 是否比文件f2 更新
f1 -ot f2 測試文件f1 是否比文件f2 更舊
示例:
3.4 結(jié)構(gòu)性語句
結(jié)構(gòu)性語句主要根據(jù)程序的運(yùn)行狀態(tài)、輸入數(shù)據(jù)、變量的取值、控制信號以及運(yùn)行時間等因素來控制程序的運(yùn)行流程。 主要包括:
條件測試語句(兩路分支)
多路分支語句
循環(huán)語句文章來源:http://www.zghlxwxcb.cn/news/detail-693682.html
循環(huán)控制語句等文章來源地址http://www.zghlxwxcb.cn/news/detail-693682.html
到了這里,關(guān)于lv3 嵌入式開發(fā)-5 linux shell腳本編程(概念、變量、語句)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!