Shell簡易記錄

這里主要記錄一些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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容