1. 程式人生 > 其它 >Shell指令碼命令

Shell指令碼命令

#! /bin/bash
echo "hello">1.txt # > 檔案覆蓋 >> 檔案追加
echo "hello";
echo 'fff'; #封號分割多命令執行

#--------------定義變數--------------------
test=123
test="$test"456 #“$變數”
echo $test
test=${test}789 #字串連線 ${test}
echo $test

#--------------單引號和雙引號-----------------
name=sc
echo '$name' #單引號內都是字串
echo "$name" #輸出內容
echo `date` #反引號輸出的命令會執行,不推薦使用
echo $(date) #推薦$()執行具體命令

#-------------unset變數刪除
name=sc
unset name
echo $name #打印不出來

# $0,$1,$2 執行shell輸入引數
echo "第一個引數檔名:$0" #檔名
echo "輸入第二個引數$1"
echo "第3個引數$2"

#-----------字串操作---------------

str="abcd"
echo "abcd字串長度:"${#str}
echo "abcd取第2個位置開始,擷取2個字元長度"${str:1:2}

#-------------陣列操作------------------


#---------算數運算子-- 不支援簡單資料運算,需要awk和expr配合,表示式之間必須要有空格----------
a=10
b=20

val=$(expr $a + $b)
echo "a + b : $val"

val=$(expr $a - $b)
echo "a - b : $val"

val=$(expr $a \* $b) #注意乘法需要帶\
echo "a * b : $val"

val=$(expr $b / $a)
echo "b / a : $val"

val=$(expr $b % $a)
echo "b % a : $val"

if [ $a == $b ]
then
echo "a 等於 b"
fi
if [ $a != $b ]
then
echo "a 不等於 b"
fi

#----------關係運算符 只支援數字,不支援字串---------------------------
a=10
b=20

if [ $a -eq $b ]
then
echo "$a -eq $b : a 等於 b"
else
echo "$a -eq $b: a 不等於 b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a 不等於 b"
else
echo "$a -ne $b : a 等於 b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a 大於 b"
else
echo "$a -gt $b: a 不大於 b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a 小於 b"
else
echo "$a -lt $b: a 不小於 b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a 大於或等於 b"
else
echo "$a -ge $b: a 小於 b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a 小於或等於 b"
else
echo "$a -le $b: a 大於 b"
fi

#-------------------布林運算子------------------
# !運算子 [!false] 返回true
# -o 或運算子 [ 5 lt 3 -o 5 gt 3]
# -a 與運算子,兩個表示式為true [ 5 lt 3 -a 5 gt 3]
# || [[ 5 lt 3 || 5 gt 3]]
# && [[ 5 lt 3 && 5 gt 3]]

a=10
b=20

if [ $a != $b ]
then
echo "$a != $b : a 不等於 b"
else
echo "$a == $b: a 等於 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 小於 100 且 $b 大於 15 : 返回 true"
else
echo "$a 小於 100 且 $b 大於 15 : 返回 false"
fi
if [[ $a -lt 100 && $b -gt 15 ]] #&&噁心前面還要個[]
then
echo "$a 小於 100 且 $b 大於 15 : 返回 true"
else
echo "$a 小於 100 且 $b 大於 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a 小於 100 或 $b 大於 100 : 返回 true"
else
echo "$a 小於 100 或 $b 大於 100 : 返回 false"
fi
if [[ $a -lt 5 || $b -gt 100 ]] #||噁心前面還要個[]
then
echo "$a 小於 5 或 $b 大於 100 : 返回 true"
else
echo "$a 小於 5 或 $b 大於 100 : 返回 false"
fi

#-------------------字串運算子------------------
# a=abc b=eft
# = [ $a = $b ] 返回false
# != [ $a != $b ] 返回true
# -z 字串長度為0返回true [ -z $a ] 返回false
# -n 字元長長度不為0返回true [ -n $a ] 返回true
# $ 檢測字串長度不為空返回true [ $a ]

#---------------echo---------------------

echo "\"ffff\""
read name
echo "$name ffffff"

#----------------test命令----------------
# test -eq -ne -gt -ge -lt -le 數值
# test $num1 = $num2 字串 = != -z (0長度) -n (非0長度)
# test -e 存在 -r 只讀 -w -x -s -d -f -c -b 檔案存在其為塊檔案

num1=100
num2=200
if test $((num1)) -eq $((num2))
then
echo 'fk'
else
echo 'ttt'
fi

result=$((num1+num2))
echo ${result}

if test $num1 = $num2
then
echo 'ffff'
else
echo 'ffff'
fi

#-----------條件語句-----------------
# if condition then ..... fi
# if condition then ..... else ..... fi
# if condition then ....... elif ....... then ....else ..... fi


a=10
b=20
if [ $a == $b ]
then
echo "a 等於 b"
elif [ $a -gt $b ]
then
echo "a 大於 b"
elif [ $a -lt $b ]
then
echo "a 小於 b"
else
echo "沒有符合的條件"
fi

num1=$((2*3))
num2=$((1+5))
if test $((num1)) -eq $((num2))
then
echo '兩個數字相等!'
else
echo '兩個數字不相等!'
fi

#--------------while-----------
# while condition
# do
# xxxxx
# done

int=1
while(( ${int}<=5 ))
do
echo $int
let int++
done


#---------------case esac
echo '輸入 1 到 4 之間的數字:'
echo '你輸入的數字為:'
read aNum
case $aNum in
1) echo '你選擇了 1'
;;
2) echo '你選擇了 2'
;;
3) echo '你選擇了 3'
;;
4) echo '你選擇了 4'
;;
*) echo '你沒有輸入 1 到 4 之間的數字'
;;
esac

#----------------------------------------

site="runoob"

case "$site" in
"runoob") echo "菜鳥教程"
;;
"google") echo "Google 搜尋"
;;
"taobao") echo "淘寶網"
;;
esac

#-------------------------------------

while :
do
echo -n "輸入 1 到 5 之間的數字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你輸入的數字為 $aNum!"
;;
*) echo "你輸入的數字不是 1 到 5 之間的! 遊戲結束"
break
;;
esac
done

#----------------------------------
while :
do
echo -n "輸入 1 到 5 之間的數字: "
read aNum
case $aNum in
1|2|3|4|5) echo "你輸入的數字為 $aNum!"
;;
*) echo "你輸入的數字不是 1 到 5 之間的!"
continue
echo "遊戲結束"
;;
esac
done

#-------------------------------
demoFun(){
echo "這是我的第一個 shell 函式!"
}
echo "-----函式開始執行-----"
demoFun
echo "-----函式執行完畢-----"

funWithReturn(){
echo "這個函式會對輸入的兩個數字進行相加運算..."
echo "輸入第一個數字: "
read aNum
echo "輸入第二個數字: "
read anotherNum
echo "兩個數字分別為 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "輸入的兩個數字之和為 $? !"

funWithParam(){
echo "第一個引數為 $1 !"
echo "第二個引數為 $2 !"
echo "第十個引數為 $10 !"
echo "第十個引數為 ${10} !"
echo "第十一個引數為 ${11} !"
echo "引數總數有 $# 個!"
echo "作為一個字串輸出所有引數 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73