Shell 程式設計 基礎用法
阿新 • • 發佈:2021-10-14
Shell 程式設計
更改shell指令碼許可權
chmod u+x shell.sh
標準頭部寫法
#! /bin/bash
#! /bin/dash
變數使用
a=10
print $a
讀取命令列引數
$# # 傳遞給指令碼的引數個數
$@ # 傳遞給指令碼所有的引數
$0 # 當前指令碼的名字
$1 # 傳遞給指令碼的第一個引數(後面依次類推)
PS: ./test.sh COMP | head
此處讀入的外界引數只有COMP,管道後面的並不會被當作引數
if的4種模式
- 1
if(($# != 2)) 2>/dev/null # 2>/dev/null意為輸出錯誤不再顯示到螢幕上,而是到null裡 then echo "$#" else # else後不用加then echo "Hello" fi
- 2
if [ $# -ne 2 ] # [ ]功能等同於test,使用-eq這些,而不是== then # [ ]中每個字元之間都要有空格 echo "$#" fi
- 3 dash不支援
if [[ $# < 5 && $# > 2 ]] # [[ ]]非常強大,可以使用邏輯表示式,也可以使用=~正則表示式 then # dash 不支援 echo "$#" fi
- 4 判斷檔案是否存在
if test -e $file # test測試後會返回一個值真或假,可測試數字、字元檔案 then echo "Exist" # -e,-r為檢測檔案是否存在 fi
test詳解
=, != # 字串匹配 (perl裡字串比較使用eq)
-gt,-eq,-ne,-lt # 數字大小判斷(perl 裡使用==與!=)
-e,-r # 判斷檔案存在,判斷檔案存在且可讀
-a # and 例:if test $a -gt 10 -a -lt 15
-o
3種for迴圈
- 1
for((i=1;i<=10;i++)) # 注意此處是雙括號 do echo "Hi" done
- 2
for i in $(seq 1 10) do echo $i done
- 3 dash寫法
while [ $index -gt 0 ]
do
filename="hello$index.txt"
echo "hello $name" > $filename
# $i = $(expr $i - 1)
index=$((index-1))
# echo +++$index
done
依次讀取目錄下的檔案
for file in *.jpg # 讀取當前目錄下所有的.jpg檔案
do
#操作變數的時候要加$,類似Vue的語法
#此處轉換.jpg為.png,注意此處的echo,它有開啟此檔案的作用,若無可能無法將值賦給變數png
png=$(echo "$file" | sed 's/jpg/png/g')
done
for file in * # 讀取當前目錄所有檔案
do
print $file
done
echo的用法
echo的一個作用是讀取檔名(並不開啟檔案)並通過管道傳遞
echo -n # 不換行輸出
echo "hello world" >> a.txt # 追加至a.txt中
echo "hello world" > a.txt # 寫入a.txt中
賦值命令列結果給變數
test=$()
test=``
加減運算
num=$(($1 + 1)) # 使用雙括號進行運算賦值,$()這種無法進行計算會報錯
num=$(expr $1 + 1) # 請注意,每個字元之間一定要有空格