1. 程式人生 > 其它 >Shell 程式設計 基礎用法

Shell 程式設計 基礎用法

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)		       # 請注意,每個字元之間一定要有空格