Shell編程—【02】命令替換、算數運算與定義變量

命令替換

方法一

`command`
複製代碼

方法二

$(command)
複製代碼

案列

獲取所用用戶並輸出

#!/bin/bash 
index = 1
for user in `cat /etc/passwd | cut -d ":" -f 1`
# for user in $(cat /etc/passwd | cut -d ":" -f 1)
do
        echo "this is $index user : $user"
        index=$(($index + 1))
done
複製代碼

根據系統時間計算明年

#!/bin/bash
# 一個小括號是命令替換
echo "This Year is $(date +%Y)"
# 兩個括號是算數運算
echo "Next Year is $(($(date +%Y) + 1))"
複製代碼

算數運算

  • 使用$(( 算數表達式 ))
  • 其中若是用到變量能夠加$ 也能夠省略
  • 如:
#!/bin/bash
num1=12
num2=232
# 兩種方式均可以讀到變量
echo $(($num1 + $num2))
echo $((num1 + num2))
echo $(((num1 + num2) * 2))

複製代碼

案列

根據系統時間獲取今年還剩多少個星期,已通過了多少個星期

#!/bin/bash
# +%j 是獲取本年過了多少天
days=`date +%j`
echo "This year have passed $days days."
echo "This year have passed $(($days / 7)) weeks."
echo "There $((365 - $days)) days before new year."
echo "There $(((365 - $days) / 7)) weeks before new year."
複製代碼

判斷nginx是否運行,若是不在運行則啓動

#!/bin/bash 
# nginx進程個數 去除grep的進程 統計結果數
nginx_process_num=`ps -ef | grep nginx | grep -v grep | wc -l`

echo "nginx process num : $nginx_process_num"

if [ "$nginx_process_num" -eq 0 ]; then
    echo "start nginx."
    systemctl start nginx
fi
# 注意不要腳本文件名不要用nginx單詞
複製代碼

++ 和 -- 運算符

num=0
echo $((num++))
# 0
echo $((num))
# 1

# 這個和其餘編程語言是同樣的 不過此時 num不能加$符號
複製代碼

有類型變量

  • shell是弱類型變量
  • 可是shell能夠對變量進行類型聲明

declare和typeset命令

  • declare命令和typeset命令二者等價
  • declare、typeset命令都是用來定義變量類型的

declare 參數列表

  • -r 只讀
  • -i 整型
  • -a 數組
  • -f 顯示此腳本前定義過的全部函數及內容
  • -F 僅顯示此腳本前定義過的函數名
  • -x 將變量聲明爲環境變量

經常使用操做

num1=10
num2=$num1+10
echo $num2
# 10+20 (默認是字符串處理)

expr $num1 + 10
# 20

# 聲明爲整形變量
declare -i num3
num3=$num1+90
echo $num3
# 100

# 查看全部函數
declare -f

# 查看全部函數的名字
declare -f

# 聲明數組
declare -a array
array=("aa" "bbbb" "ccccc" "d")

# 輸出數組內容
# 輸出所有內容
echo ${array[@]}
# aa bbbb ccccc d

# 根據索引輸出
echo ${array[2]}
# ccccc

# 獲取數組長度
# 數組元素的個數
echo ${#array[@]}
# 4

# 數組指定下標元素的長度
echo ${#array[3]}
# 1

# 給某個索引位置賦值
array[0]="aaa"

# 刪除元素
# 清除元素
unset array[2]
echo ${array[@]}
# aaa bbbb d
# 清空整個數組
unset array
echo ${array[@]}
#

array=("aa" "bbbb" "ccccc" "d")

# 數組分片訪問 索引從 1到3 的 3 個元素
echo ${array[@]:1:4}
# bbbb ccccc d

# 數組遍歷
for v in ${array[@]}
do
    echo $v
done
# aa
# bbbb
# ccccc
# d

# 聲明爲環境變量 聲明爲環境變量事後 該變量與終端無關,能夠在任何系統腳本中讀取
# 在終端運行 以下:
env="environment"
declare -x env

# 可在腳本中直接讀
echo ${env}

複製代碼
相關文章
相關標籤/搜索