Shell 命令替換


1、命令替換,有兩種方式

  方式一:`command`

  方式二:$(command)

2、應用場景

  在命令中通過命令替換的方式,將某些子命令的結果嵌入到當前命令中。

3、舉例

  例1: 獲取系統所用用戶並輸出。  

// 命令形式
cat
/etc/passwd | cut -d ":" -f 1
#!bin/bash
# 命令替換, bash腳本形式

index=1

for user in `cat /etc/passwd | cut -d ":" -f 1 `
do
        echo "This is $index user: $user"
        index=$(($index + 1))
done

  例2: 根據系統時間輸出今年或者明年的年份

$ date
輸出:2019年 03月 24日 星期日 10:12:25 CST

$ date +%Y   
輸出:2019

$ echo "This is $(($(date +%Y) + 1)) year"
輸出:This is 2020 year

  例3: 根據系統時間獲取今年過去多少個星期,還剩下多少個星期?

#!bin/bash

days=$(date +%j)

# 獲取日期的第一位,如果是0.則必須處理掉,否則不能參加運算
index0=${days:0:1}

# 如果日期第一位為0,例如083,則刪掉掉0
if [ $index0 == "0" ]
then
days=${days:1}
fi

echo "今年過去 $days 天"
echo "今年過去 $(($days / 7)) 個星期"

echo "今年還剩下 $((365 - $days)) 天"
echo "今年還剩下 $(((365 - $days) / 7))" 個星期

   例4:判斷 nginx 進程是否啟動,如果沒啟動,則啟動

#!bin/bash

# 判斷 ngnix進程是否啟動,如果沒有啟動,則啟動

# grep -v grep 是過濾掉grep nginx這個進程
# wc -l 是統計輸出多少行
nginx_process_num=$(ps -ef | grep nginx | grep -v grep | wc -l)

if [ $nginx_process_num -eq 0 ]; then
        systemctl start nginx
fi

 

總結:` ` 和 $() 是等價的,初學者推薦使用 $()。缺點是 有極少數的 unix 不支持 $(),但都支持 ` `

  $(()) 主要用來做整數運算,包括加減乘除,引用變量前可以加 $,也可以不加 $,比如:

  num1=100, num2=10

  echo $(($num1 + $num2))  等價於 echo $((num1 + num2))     // 這也證明了 shell 語法是不規范的

  ((num1++))  ((num--))  可以實現自增和自減

 


免責聲明!

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



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