文章目錄
- 簡介
- 目標
- 閱讀基礎
- 環境說明
- 參考資料
- 第一個shell腳本
- 輸出命令echo
- 輸出字串腳本
- 互動式shell腳本
- 輸入輸出命令
- 單個引數輸入腳本
- 多個引數輸入腳本
- shell腳本的數值計算
- test測驗命令
- test命令
- &&和||命令
- 測驗檔案是否存在腳本
- 測驗字串是否相等腳本
- 中括號[]判斷符
- shell腳本默認引數
- 最近更新
簡介
我們已經能夠熟練的在終端中輸入命令來完成一些常用的操作,但是我們都是一條一條輸入命令,這樣會很麻煩,那么有沒有一種方式可以將很多條命令放到一個檔案里面,然后直接運行這個檔案即可?肯定有,這個就是shell腳本!
shell腳本類似windows的批處理檔案,shell腳本就是將連續執行的命令寫成一個檔案,shell腳本提供陣列、回圈、條件判斷的等功能,
shell腳本一般是Linux運維或者系統管理員要掌握的,作為嵌入式開發人員,只需要掌握shell腳本最基礎的部分即可,
目標
了解Ubuntu下shell腳本,
閱讀基礎
熟悉計算機,
環境說明
- windows10
參考資料
- 原子檔案:I.MX6ULL開發指南 第三章
- NXP官方檔案:I.MX6ULL參考手冊、資料手冊
第一個shell腳本
輸出命令echo
使用echo作為shell的輸出,echo命令用于在終端設備上輸出字串或變數提取后的值,這是在Linux系統中最常用的幾個命令之一,但操作卻非常簡單,人們一般使用在變數前加上$符號的方式提取出變數的值,例如:$PATH,然后再用echo命令予以輸出,或者直接使用echo命令輸出一段字串到螢屏上,起到給用戶提示的作用,
語法格式:echo [選項] [字串]常用引數:
-n 不輸出結尾的換行符 -e “\a” 發出警告音 -e “\b” 洗掉前面的一個字符 -e “\c” 結尾不加換行符 -e “\f” 換行,游標扔停留在原來的坐標位置 -e “\n” 換行,游標移至行首 -e “\r” 游標移至行首,但不換行 -E 禁止反斜杠轉移,與-e引數功能相反 —version 查看版本資訊 –help 查看幫助資訊
輸出字串腳本
shell腳本是個純文本檔案,擴展名為.sh,命令從上而下,一行一行的開始執行,shell腳本第一行一定要為:#!/bin/bash表示使用bash,
在用戶目錄下創建檔案my.sh,

比如在終端輸出一個hello world!,使用命令echo "hello world !"在終端輸出如下圖:

使用shell腳本來實作同樣的功能,撰寫內容如下圖:

撰寫完成,

要執行shell腳本,必須添加檔案權限,添加所有權限使用命令chomd 777,如下圖:

互動式shell腳本
輸入輸出命令
? 使用read作為shell的輸入,Linux read命令用于從標準輸入讀取數值,read 內部命令被用來從標準輸入讀取單行資料,這個命令可以用來讀取鍵盤輸入,當使用重定向的時候,可以讀取檔案中的一行資料,
read [選項]常用引數:
-a 后跟一個變數,該變數會被認為是個陣列,然后給其賦值,默認是以空格為分割符 – d 后面跟一個標志符,其實只有其后的第一個字符有用,作為結束的標志 – p 后面跟提示資訊,即在輸入前列印提示資訊 – e 在輸入的時候可以使用命令補全功能 – n 后跟一個數字,定義輸入文本的長度 – r 屏蔽\,如果沒有該選項,則\作為一個轉義字符,有的話 \就是個正常的字符了 – s 安靜模式,在輸入字符時不再螢屏上顯示 – t 后面跟秒數,定義輸入字符的等待時間 – u 后面跟fd,從檔案描述符中讀入,該檔案描述符可以是exec新開啟的
單個引數輸入腳本
撰寫shell,功能輸入名字,輸出名字,如下:
#! /bin/bash
echo "please input name:"
read name
echo "your name:"$name
輸入命令./my.sh,執行腳本,安照提示輸入名字,輸出成功,如下圖:

多個引數輸入腳本
撰寫shell,功能輸入年齡和身高,輸出年齡和身高,如下:
#! /bin/bash
read -p "input your age and height:" age height
echo "your age=$name,your height=$height"
輸入命令./my.sh,執行腳本,提示輸入年齡和身高,輸出成功,如下圖:

shell腳本的數值計算
shell僅支持整形,可以進行數值計算,格式:$((運算式)),
撰寫shell,功能求兩個整數的和,輸出兩個整數的和,如下:
注意:total后的=號不能有空格,
#! /bin/bash
echo "please input two int num:"
read -p "first num:" first
read -p "second num:" second
total=$(($first+$second))
echo "$first + $second = $total"
輸入命令./my.sh,執行腳本,提示輸入第一個數和第二個數,輸出成功,如下圖:

test測驗命令
test命令
test 命令用于檢查某個條件是否成立,它可以進行數值、字符和檔案三個方面的測驗,
test 命令期望在命令列中找到一個引數,當 shell 沒有為變數賦值時,則將該變數視為空,這意味著在處理腳本時,一旦腳本尋找的引數不存在,則 test 將報告該錯誤,
語法格式:
test [運算式]
數值測驗:
-eq (=) 等于則為真 -ne (!=) 不等于則為真 -gt (>) 大于則為真 -ge (>=) 大于等于則為真 -lt (<) 小于則為真 -le (<=) 小于等于則為真
字串測驗:
引數 說明 = 等于則為真 != 不相等則為真 -z 字串 字串的長度為零則為真 -n 字串 字串的長度不為零則為真
檔案測驗:
引數 說明 -e 檔案名 如果檔案存在則為真 -r 檔案名 如果檔案存在且可讀則為真 -w 檔案名 如果檔案存在且可寫則為真 -x 檔案名 如果檔案存在且可執行則為真 -s 檔案名 如果檔案存在且至少有一個字符則為真 -d 檔案名 如果檔案存在且為目錄則為真 -f 檔案名 如果檔案存在且為普通檔案則為真 -c 檔案名 如果檔案存在且為字符型特殊檔案則為真 -b 檔案名 如果檔案存在且為塊特殊檔案則為真
&&和||命令
cmd1 && cmd2 當cmd1執行完并且正確,那么cmd2開始執行,如果cmd1執行完畢錯誤,那么cmd2不執行,
cmd1 || cmd2當cmd1執行完畢并正確,那么cmd2不執行,如果cmd1執行完畢錯誤,那么cmd2執行,
測驗檔案是否存在腳本
撰寫shell,功能判斷檔案是否存在,存在則輸出存在,不存在則輸出不存在,如下:
#! /bin/bash
echo "please input file name:"
read -p "file name:" filename
test -e $filename && echo "$filename exist" || echo "$filename not exist"
輸入命令./my.sh,執行腳本,提示輸入檔案名ddd.txt,輸出不存在,如下圖:

輸入命令./my.sh,執行腳本,提示輸入檔案名my.sh,輸出存在,如下圖:

測驗字串是否相等腳本
撰寫shell,功能判斷兩個字串是否相等,相等則輸出相等,不存在則輸出不相等,如下:
#! /bin/bash
echo "please input two string:"
read -p "first string:" firststr
read -p "second string:" secondstr
test $firststr == $secondstr && echo "firststr == secondstr" || echo "firststr != secondstr"
輸入命令./my.sh,執行腳本,提示輸入檔案名ddd aaa,輸出不相等,如下圖:

輸入命令./my.sh,執行腳本,提示輸入檔案名ddd ddd,輸出相等,如下圖:

中括號[]判斷符
[空格 引數 == 引數 空格]
撰寫shell,功能判斷兩個字串是否相等,相等則輸出相等,不存在則輸出不相等,如下:
#! /bin/bash
echo "please input two string:"
read -p "first string:" firststr
read -p "second string:" secondstr
[ "$firststr" == "$secondstr" ] && echo "firststr == secondstr" || echo "firststr != secondstr"
輸入命令./my.sh,執行腳本,提示輸入檔案名ddd aaa,輸出不相等,如下圖:

輸入命令./my.sh,執行腳本,提示輸入檔案名ddd ddd,輸出相等,如下圖:

shell腳本默認引數
$0~$n,表示shell腳本的引數,包括shell腳本命令本身,shlle腳本命令本身為$0
$#:#表示最后一個引數的標號,
@:表$1、?$2、$3…
撰寫shell,功能運行時接受命令列輸入引數,輸出不同資訊,如下:
#! /bin/bash
echo "file name:" $0
echo "total param num:" $#
echo "whole param:" $@
echo "first param:" $1
echo "second param:" $2
輸入命令./my.sh,帶引數a b執行腳本,輸出資訊,如下圖:

最近更新
查看本文最近更新請點擊
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294044.html
標籤:其他
