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--)) 可以實現自增和自減