shell 編程


1. echo 參數

  • -n 不換行(默認換行)
  • -e 使得轉移字符有效

例子

ss='abc\n'
echo -e  $ss
abc
           #換行起作用 echo $ss
abc

2. 賦值

2.1 =左右兩側不要帶空格

a = "hello" #錯誤
a="hello"

2.2 左邊變量名不可加$

$a='134'

[jihite]
$a=$a'abc'

[jihite]
$echo a
a

[jihite]
$echo $a
134abc

 

3. shell運算

b=4
let "c=$b+1"
echo $c

小例

i=9000
while [ $i -lt 9010 ]
do
    let "i=$i+1"
    echo $i
done
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010

4. 單引號和雙引號區別

單引號和雙引號一樣都是字符串的界定符,而不是字符的界定符。單引號用於保持引號內所有字符的字面值,即使引號內的\和回車也不例外。

舉例

 bb="hello"
echo "$bb"
hello
echo '$bb'
$bb

注意ecoh -e '$bb' 結果還是$bb,因為'$bb'就是字面值,不會轉義。

5. 數組

5.1 聲明、定義

  • array['a']=1
  • array=('a', 'b')
  • array=([1]='a' [2]='b')

5.2 訪問

  • echo ${array['a']}
  • echo ${array[0]}

5.3 遍歷

for var in ${array[*]}
do
    echo $var
done

5.4 數組長度

num=${#array[@]}    

對比:獲取字符串長度:num=${#str}

6. Linux shell實現多線程

for ((i=0;i<5;i++)); do
{
    sleep 3;
    echo "hello" $i
}
done
wait

對比

for ((i=0;i<5;i++)); do
{
    sleep 3;
    echo "hello" $i
}&
done
wait

這個在上面的基礎上多加了一個后台執行&符號,此時5個循環任務並發執行,最后需要3s多一點的時間(效果非常明顯)。wait的作用是完成后台所有的任務后才往下執行,否則程序本身會等待。

7. 去除一行最后的'\r'

字符串最后有個'\r'是非常惡心的,可以通過tr命令去掉

a="hello\r"
echo $a | tr -d '\r'
hello\r
echo $a | tr -d "\r"
hello\r
echo -e $a | tr -d '\r'
hello  #轉移字符起作用 echo -e $a | tr -d "\r"
hello

8. 編譯shell文件

bash -x ***.sh

+開頭的是編譯的中間過程,不帶+的為正常的輸出。效果非常明顯。 

9. if else

#!/bin/bash
proc=$1
proc_num=`ps -ef | grep root | grep $proc | wc -l`
echo $proc_num
if [ $proc_num = 2 ]
then exit 0
else exit 2
fi

:if [ con ], 條件con和[]之間有空格

  • -ne —比較兩個參數是否不相等
  • -lt —參數1是否小於參數2
  • -le —參數1是否小於等於參數2
  • -gt —參數1是否大於參數2
  • -ge —參數1是否大於等於參數2

   e.g.    if [ $proc_num -gt 1 ]

以上為數字的比較,字符串的比較用'='、'!='。e.g.

rev=$(cat /etc/ld.so.conf | grep usr/local/lib)
if [[ $rev != '/usr/local/lib' ]]
then
        echo "hello"
fi

10. for循環

例1:

  • sleep 1    睡眠1秒
  • sleep 1s    睡眠1秒
  • sleep 1m   睡眠1分
  • sleep 1h   睡眠1小時

例如:以下shell腳本每隔10秒鍾就打印出“Hell, dansir”

#!/bin/shell
while   true
do
   echo "Hello, dansir"
   sleep 10s
done

例2:

ids="
123
456
789"

for i in $ids
do
    echo $i
done

執行

$sh del.sh
123
456
789

11. 執行變量里的命令

$(eval  echo $v_endcomm)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM