15.华清嵌入式--shell脚本
一.shell腳本基礎知識
shell腳本(shell命令的有序集合)
編譯型語言(c語言,需要編譯成可執行文件,但是執行效率高)
解釋型語言(shell語言,不需要編譯,使用靈活)
shell編程基本步驟
注:一個文件有三個權限,分別是讀(r)、寫(w)和執行(x),它們對應的數分別是4、2和1。
文件權限?r-x-wxr--對應的八進制表示形式為r-x =4+1=5
-wx=2+1=3 ?r--=4 所以上面用8進制表示為0534
root的缺省unmask是022 代表644
umask設置了用戶創建文件的默認 權限,它與chmod的效果剛好相反,umask設置的是權限"補碼",而chmod設置的是文件權限碼。
二.shell變量
1.任何賦值都解釋為 一串字符。
例:
count=1 //注:變量沒有類型,等號不能有空格
echo $count
DATE =`data` //data為一個命令,用命令置換符
echo $DATE
unset DATE //unset命令刪除變量賦值
?
2.Bourne shell 的四種變量
用戶自定義變量(通常變量用全大寫(COUNT=1))
位置變量(命令行參數)
預定義變量
環境變量
?
?
(1)用戶變量注意事項:變量全大寫,變量前加$,
(2)位置變量
$1 --$9 包含第一到第九個命令行參數(命令行賦值)
${10} //9以上用括號括起來
$# 命令行參數的個數
$@($*)顯示所有命令行參數
$? 前一個命令的退出狀態(輸出結果)
$$ 包含正在執行進程的ID號
?
(3)環境變量
export (env)//查看常見的環境變量
?
常用環境變量
HOME:$HOME ?etc/passwd文件中列出的用戶主目錄
IFS: Internal Field Separator, 默認為空格,tab及換行符
PATH:搜索路徑
PS1,PS2; 默認提示符($)及換行提示符(>)
TERM: 終端類型,常用的有vt100,ansi,vt200,xterm等
?
三.shell功能語句
1.shell語句包括三類
說明性語句:(#開始,就是注釋),
功能性語句:(shell命令,用戶程序或者其他shell程序),
結構性語句:(條件測試語句,多路分支語句,循環語句,循環控制語句)
?
2.
read 從標準輸入讀入一行,并賦值給后面的變量
read var1 var2 var3
例:
#!/bin/bash
echo “input anumber”
read NUM
echo $NUM
echo -n “input a number” //-n命令行輸出參數不換行
?
3.expr 算數運算命令
主要用于簡單整數運算(+ - \* / %)//乘法特殊要加轉義符
A=`expr 12 + 5 \* 3`
echo $A
?
4.test 測試語句
可測試三種類型對象(字符串 整數 文件屬性)
test “$answer” = “yes” //變量answer的值是否為字符串yes
test $num -eq 18 //num是否為18
test -d tmp //tmp是否為一個目錄名
?
(1)文件測試
(-f 是否為普通文件 -L是否為鏈接文件)
f1 -nt f2 文件f1是否比文件f2更新
發 -ot f2 f1比f2是否更舊
?
(2)字符串測試
test $s1 = $s2 測試字符串內容是否一樣
s1 != s2 測試字符串內容是否有差異
-z s1 字符串長度是否為0
-n s1 字符串長度是否不為0
?
(3)整數測試
a -eq b //是否相等
a -ne b // 是否不等
a -gt b //a是否大于b
a -ge b //a是否大于等于b
a -lt b //a是否小于b
a -le b// a是否小于等于b
?
pwd
echo $? //上一條指令是否成功,輸出0代表成功
?
四.shell分支語句
?
條件測試語句
多路分支語句
循環語句
循環控制語句
后臺執行語句
?
1.
if 表達式
then
?????? 命令表
fi
?
//then fi成對出現類似于c語言中的括號,每個if后面都要跟一個then
if test -f $1
then
?????? echo “$1 is a file”
fi
2.
如果想加else呢?/
if? test -f $1
then
?????? echo “$1 is a file”
else
?????? echo “$1 is not a file”
fi
?
3.
//if? else if else 怎么表示
if test $val -eq 0 //if [ $val -eq 0 ]
then
?????? echo “val=0”
elif test $val -gt 0//elif [ $val -gt 0 ]
then
?????? echo “val>0”
else
?????? echo “val<0”
fi
注:括號兩側要加空格
if [ $val -lt 0 ] || [ $val -gt 100 ]
then
?????? echo “input error”
?????? exit 0 //退出
fi
?
2.
c語言中的switch case語句,在腳本中類似的語句
多路分支語句case
只能檢測字符串變量
右括號結束
一次可以匹配多個模式 | 分開
命令表以單獨的雙分號行結束,退出case 語句(類似于break)
模式n常寫為字符*,表示所有其他模式 (類似于default)
例:
read val
val =`expr $val / 10`
case $val in
?????? 8|9|10)
????????????? echo “A”
????????????? ;;
?????? 6|7)
????????????? echo “B”
????????????? ;;
?????? *)
????????????? echo “C”
????????????? ;;
esac
?
?
五.shell循環語句
for 的用法
?
for ((val=1; val <= 5; val=$val + 1))//for val in 1 2 3 4 5
do
?????? echo “val = $val”
done
//do 和done配合用類似于花括號
還可以取文件
for file in `ls`
do
?????? echo “$file”
done
?
while 的用法
NUM=1
while (($NUM <10)) //while [ $NUM -lt 10 ]
do
?????? echo”*********”
?????? NUM=’expr $NUM + 1’
done
?
循環控制語句
break 之后都不執行
continue //本次不執行
?
六.函數
fun()
{
A=$1
B=$2
C=$3
NUM=`expr $A + $B + $C`
echo “hello world”
return $NUM //返回的也是字符
}
fun 3 4 5 //函數調用及傳參
//A B C等函數變量作用域是整個文件,如果想將A改為局部變量
local A=$1 //local
總結
以上是生活随笔為你收集整理的15.华清嵌入式--shell脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 防止浏览器要求翻译
- 下一篇: python登录百度网盘