這里主要記錄一些Shell的常用語法,便于后期記憶和查找。
1. 變量的定義與輸出
echo "Hello World"
# 定義變量時(shí)不能有空格
A=10
echo "A = $A"
echo
# 表示當(dāng)前文件
echo $0
# 表示第一個(gè)傳入的參數(shù)
echo "the first arg is $1"
# 表示第二個(gè)傳入的參數(shù)
echo "the second arg is $2"
echo
# ? * #
# ? 表示上一條命令是否執(zhí)行成功 0 表示成功
echo $?
# * 表示所有的參數(shù)
echo $*
# # 表示參數(shù)的個(gè)數(shù)
echo $#
# 當(dāng)前文件的絕對(duì)路徑
echo $PWD
echo
# expr (expression)表達(dá)式的縮寫,通過這個(gè)可以進(jìn)行算術(shù)運(yùn)算
num1=2
num2=3
# num3=2 + 3 如果要進(jìn)行算術(shù)運(yùn)算,必須要有空格與 『+』 分開 ,注意:這樣直接賦值是錯(cuò)誤的
echo $num1+$num2
echo $num1 + $num2
echo `expr $num1+$num2`
echo `expr $num1 + $num2`
2. 運(yùn)算方式
# 算術(shù)運(yùn)算方式
# 1. 使用$(()) $只是取值符
# 2. 使用$[]
# 3. 使用let命令
# 4. 使用expr外部程式
a=$(( 2 + 4 ))
echo $a
b=$[ 3 + 5 ]
echo $b
let c=7+8
echo $c
# 注意空格,推薦使用這種,多數(shù)環(huán)境是支持的
d=`expr 9 + 9`
echo $d
# 算術(shù)運(yùn)算符
# + - * / % = == !=
# 關(guān)系型
# -eq 相等 -ne 不相等
# -gt 大于(greater than) -lt 小于(less than)
# -ge 大于等于(greater equal) -le 小于等于(less equal)
# 布爾型
# ! 非 -o 或(or) -a 與(and)
# 邏輯型
# && ||
# 字符串
# = 檢測(cè)是否相等 != 檢測(cè)是否不相等
# -z 檢測(cè)字符串長度是否為0 -n 檢測(cè)字符串長度是否 不 為0
# $ 檢測(cè)字符串是否為空,不為空返回true
s1=""
s2="efg"
if (( $s1 = $s2 ))
then
echo "s1 equal s2"
else
echo "s1 not equal s2"
fi
if [ -z $s1 ]
then
echo "the length is 0"
else
echo "the length is not 0"
fi
3. if條件判斷
# if(表達(dá)式); then
# echo " < "
# else
# echo " > "
# fi
if((100 > 200)); then
echo " < "
else
echo " > "
fi
# 一些常用的判斷操作
# -f 判斷文件是否存在
# -d 判斷文件夾是否存在
# -eg 等于(整形比較)
# -ne 不等于比較
# -le 小于比較
# -ge 大于比較
# -a 雙方都成立
# -o 單方成立
echo
DIR=$PWD/createDir
if [ -d $DIR ]
then
echo "dir already exists"
else
mkdir -p $DIR
if(($? == 0)); then # 注意:括號(hào)是括號(hào),表達(dá)式是表達(dá)式,表達(dá)式的一部分就是括號(hào)
echo "create successd"
else
echo "create fail"
fi
fi
4. for 循環(huán)
# for 變量 in 字符串
# do
# 語句
# done
for i in `seq 1 10`
do
echo "$i"
done
# 累加從1到100
echo
j=0
for((i=1;i<=100;i++))
do
j=`expr $j + $i`
done
echo "total is $j"
# 打印當(dāng)前目錄下的所有文件
echo $0
for i in `find $PWD -name "*.sh"`
do
echo $i
done
# while 條件語句
# do
# 語句
# done
echo
i=0
while((i<10))
do
i=`expr $i + 1`
echo $i
done
echo
i=0
# 注意while當(dāng)前行空格的位置,空格錯(cuò)一個(gè)都不能通過
while [[ $i -lt 10 ]]
do
i=`expr $i + 1`
echo "lt $i"
done
5. 函數(shù)
# 基本格式
# name(){
# command
# command2
# }
# 基本格式2
# [ function ] funname [()]{
# action;
# [return int;]
# }
function test(){
echo "this is a function"
}
function test1(){
# 實(shí)際上 $ 表示的是函數(shù)中的輸入,可以理解為第一個(gè)形參,并非是外面的$1
echo "this is input data : $1"
}
test
test1 $1
# 比如:實(shí)現(xiàn)一個(gè)階乘
t=1;
function factorial(){
for((i=1;i<=$1;i++))
do
# t=$[ $i * $t ]
t=`expr $i \* $t ` # 注意反斜杠
done
echo "$1 factorial is : $t"
}
factorial $1
# return test
function functionReturn(){
read -p "please input a number: " num
# 如果這里不定義返回值,如果執(zhí)行成功會(huì)返回0,不成功則返回1-255之間的錯(cuò)誤碼
# 但是:return 只能返回 0-255之間的值,如果要返回字符串或者大于255的值,也會(huì)溢出,這時(shí)你需要使用echo
return $[ $num * 2 ]
}
functionReturn
echo "the return number is : $?"
# return test1
function functionReturn1(){
read -p "please input a number: " num
echo $[ $num * 2 ]
}
functionReturn1
# 這里的輸出只能表示成功與否
echo "the return number is : $?"
# 需要去函數(shù)的值
result=`functionReturn1`
echo "the return number is : $result"
6. 文件操作
# while read line
# do
# echo $line
# done<文件名
while read line
do
echo $line
done<$PWD/test.sh