常用shell指令碼

天外来客I發表於2024-05-30

數字和字元:

#! /bin/bash
a=10
b=20
#===============================數字運算==============================
val=$[a + b]
val=$[a - b]
val=$[b / a]
val = $[4*(a+b)]
#===============================數字比較==============================
if [ $a -eq $b ]; then
if [ $a -ne $b ]; then
if [ $a -gt $b ]; then
if [ $a -lt $b ]; then
#===============================數字比較==============================
a="abc"
b="efg"
if [ $a = $b ]; then
if [ $a != $b ]; then
if [ -z $a ]; then
   echo "-z $a : 字串長度為 0"
if [ -n "$a" ]; then
   echo "-n $a : 字串長度不為 0"
if [ $a ]; then
   echo "$a : 字串不為空"

#======字串包含======

    # 字串不包含
    RESULT=`grep "172.21.101.5" /etc/resolv.conf`
    if [ -z "$RESULT" ]; then
            sed -i '2i nameserver 172.21.101.5' /etc/resolv.conf
    fi
    #字串 包含
    RESULT=`grep "172.16.0.236" /etc/apt/sources.list`
    if [ -n "$RESULT" ]; then
    echo -e "\n\033[33m [INFO] ---------------查詢成功--------------- \033[0m\n"
    return 1
    fi
    
strA="long string"
strB="string"
result=$(echo $strA | grep "${strB}")
    if [ -n "$RESULT" ]; then
        echo -e "\n\033[33m [INFO] ---------------查詢成功--------------- \033[0m\n"
        return 1
    fi      
str='this is a tree! and that is a car.'
[[ $str =~ "this" ]] && echo "\$str contains this"

sed 用法:

sed -i "2i\sed add new line ---------" ./03.txt	      #第二行插入內容
sed -i '$a\server 172.22.15.100 iburst'  /etc/ntp.conf   #尾行插入內容

sed -i '/the new/d' 1.txt					#刪除匹配行,包含the new 字串的行
sed -i  '/xml/!d' a.txt					#刪除不包含 xml 字元的行
sed -i '$'d  aa.txt				#刪除末尾行
sed  -i  '2,$d' file					#刪除檔案的第2行到末尾所有行:

sed -i '4,7s/^/#/'  a.txt					#//註釋檔案4-7行(行前新增:#)
sed -i 's/xml/abc/g' a.txt					#將全文所有xml替換為abc
sed -i '/swap/s/^/#/' /etc/fstab				# 註釋包含swap的行
sed -n '/swap/p' /etc/fstab

 nl testfile | sed -n '5,7p'	# 僅列出 testfile 檔案內的第 5-7 行:
 nl testfile | sed -n '/oo/p'	# 搜尋 testfile 有 oo 關鍵字的行:
 sed -n '/test/,/check/p' file    	#test和check所確定的範圍內的行都被列印:
 
 sed -i '5c\No 2-5 number'  file    #將第五行修改為:新內容
 sed -i '2,5c\No 2-5 number'  file  #將2-5行修改為:新內容    

其它記錄:

ls -l | awk -F " " '{print $3, $9}'        # 獲取檔案列表某列資訊
dpkg -l | grep -w git                #只顯示包含git單詞的字元-w, --word-regexp
lspci | grep -i ether                # -i  忽略大小寫
ps -ef | grep -w agent | grep -v grep            # -v 不顯示 grep內容的文字行
grep -rl "" ./* | xargs sed -i 's/root/audadmin/g'         #替換檔案內容
sed -i '/iface eth2/,/eth2/ s/eth2/eth3/g' ./interfaces        #sed 先搜尋後替換,逗號分割 #替換指定行內容
批次操作:
ls *.tar.gz | xargs -n1 tar xzvf                      // n1 數字1
for tar in *.tar.gz;  do tar xvf $tar; done            # 批次解壓檔案
for ((i=5; i<10; i++)) ;do ping 172.20.11.$i -c 3; done
操作檔案
caja ./        開啟資料夾        ---linx-100系統
刪除多個檔案
   rm -rf step.{11..37}
刪除其它檔案:
   rm -rf !(step.1)
   rm -rf !(step.1 | step.2)
建立多個檔案
   touch a{1..5}.txt
批次複製檔案:
   find ./ -name "*.pdf" | xargs -i -t cp {} ../lats-doc/
批次修改檔案內容:
   grep -rl "" ./* | xargs sed -i 's/root/audadmin/g' 

相關文章