加減乘除 求餘 num1 + num2 num1 - num2 num1 * num2 num1 / num2 num1 % num2 求餘
expr $(()) $[] let 只支援整數運算,不支援小數運算 expr 數值之間必須要有空格進行分開,當使用*乘的時候,需要對其進行轉義使用,不能進行次方運算 [root@shell01 scripts]# expr 1 + 1 2 [root@shell01 scripts]# num1=10 [root@shell01 scripts]# num2=5 [root@shell01 scripts]# expr $num1 + $num2 15 [root@shell01 scripts]# expr $num1 \* $num2 #這裡\取消*的特殊含義 50 [root@shell01 scripts]# expr $num1 / $num2 2 [root@shell01 scripts]# expr $num1 % $num2 0 $(()) 沒有嚴格的格式要求,不能進行次方運算 [root@shell01 scripts]# echo $(($num1+$num2)) #$(())沒有嚴格的格式要求,當中不用有空格 15 [root@shell01 scripts]# echo $(( $num1 - $num2 )) 5 [root@shell01 scripts]# echo $(( $num1 * $num2 )) 50 [root@shell01 scripts]# echo $(( $num1 / $num2 )) 2 [root@shell01 scripts]# echo $(( $num1 % $num2 )) 0 $[] 沒有嚴格的格式要求,不能進行次方運算 [root@shell01 scripts]# echo $[$num1+$num2] 15 [root@shell01 scripts]# echo $[$num1 - $num2] 5 [root@shell01 scripts]# echo $[$num1 * $num2] 50 [root@shell01 scripts]# echo $[$num1 / $num2] 2 [root@shell01 scripts]# echo $[$num1 % $num2] 0 let 計數 [root@shell01 scripts]# a=10 [root@shell01 scripts]# let a++ [root@shell01 scripts]# let a++ [root@shell01 scripts]# echo $a 12 [root@shell01 scripts]# let a-- [root@shell01 scripts]# let a-- [root@shell01 scripts]# echo $a 10
bc awk python bc預設是沒有的,需要下載 [root@shell01 scripts]# yum install -y bc [root@shell01 scripts]# bc #互動式運算一般不用,除法值也有問題 bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. ... 1+1 2 3/2 1 [root@shell01 scripts]# echo 10 + 20 |bc 30 [root@shell01 scripts]# echo $num1 10 [root@shell01 scripts]# $num3=3 [root@shell01 scripts]# echo $num1 + $num3 |bc 13 [root@shell01 scripts]# echo $num1 / $num3|bc #計算值有問題,沒有小數位 3 [root@shell01 scripts]# echo "scale=2;$num1 / $num3"|bc #scale設定小數位為2位 3.33 [root@shell01 scripts]# echo $num1 ^ $num3 |bc #次方運算 1000 awk 預設對檔案進行操作,加入行處理前BEGIN就不會報錯,直接進行計算 BEGIN 行處理前 [root@shell01 scripts]# awk 'BEGIN{print 10 + 5}' 15 [root@shell01 scripts]# awk 'BEGIN{print 10 - 5}' 5 [root@shell01 scripts]# awk 'BEGIN{print 10 * 5}' 50 [root@shell01 scripts]# awk 'BEGIN{print 10 / 5}' 2 [root@shell01 scripts]# awk 'BEGIN{print 10 % 5}' 0 [root@shell01 scripts]# awk 'BEGIN{print 10 ^ 5}' #支援次方運算 100000 [root@shell01 scripts]# awk 'BEGIN{print 10 / 3}' #除法小數位是隨機的,最大5位 3.33333 [root@shell01 scripts]# awk 'BEGIN{printf "%.3f\n",10/3}' #自定義小數位,採用python寫法,\n進行換行 3.333 #注意awk用外部變數,要用雙引號 [root@shell01 scripts]# awk "BEGIN{print $num1/$num2}" 2 #awk可以用內部變數 -v #自定義內部變數 [root@shell01 scripts]# awk -vnum1=10 -vnum2=5 'BEGIN{print num1/num2}' #這裡變數前不要加$,不然變列行 2 python [root@shell01 scripts]# python #互動式 Python 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 10/3 3 >>> 10.0/3 #要得到小數,首先把數字變為浮點型 3.3333333333333335 [root@shell01 scripts]# echo "print $num1 + $num2" | python #這裡採用python的寫法 15 [root@shell01 scripts]# echo "print $num1 - $num3" | python 7 [root@shell01 scripts]# echo "print $num1 / $num3" | python 3 [root@shell01 scripts]# echo "print ${num1}.0 / $num3" | python 3.33333333333
1.ps aux命令下,求VSZ列的和 (VSZ虛擬記憶體集,RSS實體記憶體集) #第一種 [root@shell01 ~]# ps aux | awk 'NR>1{print $5}'|xargs #xargs分組作用,把一列分成一行 125884 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37116 45744 0 0 0 0 0 0 0 0 0 0 0 0 62052 0 0 228320 26380 58236 73656 201724 612240 99576 300828 473820 225828 126388 110192 573932 112764 220792 89556 89728 161372 116332 89660 0 0 0 0 155464 113640 116332 [root@shell01 ~]# ps aux | awk 'NR>1{print $5}'|xargs |tr ' ' '+' 125884+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+37116+45744+0+0+0+0+0+0+0+0+0+0+0+0+62052+0+0+228320+26380+58236+73656+201724+612240+99576+300828+473820+225828+126388+110192+573932+112764+220792+89556+89728+161372+116332+89660+0+0+0+155464+113640+108352+108076 [root@shell01 ~]# ps aux | awk 'NR>1{print $5}'|xargs |tr ' ' '+'|bc 4863984 #第二種 [root@shell01 ~]# ps aux | awk 'NR>1{i+=$5}END{print i}' #第五列相加,END等前面計算結束 4531224 #第三種 [root@shell01 scripts]# vim for_vsz.sh #!/bin/bash he=0 for i in $(ps aux| awk 'NR>1{print $5}') do he=$(expr $he + $i) done echo $he [root@shell01 scripts]# sh -x for_vsz.sh #-x顯示指令碼執行過程 2.寫個指令碼,實現一個簡單的計算器,實現加減乘除 [root@shell01 scripts]# vim jsq.sh #!/bin/bash read -p "請輸入你要計算的第一個數字:" num1 read -p "請輸入你要計算的第二個數字:" num2 echo "$num1 + $num2 = $[ $num1 + $num2 ]" echo "$num1 - $num2 = $[ $num1 - $num2 ]" echo "$num1 * $num2 = $[ $num1 * $num2 ]" echo "$num1 / $num2 = $(awk "BEGIN{print $num1 / $num2}")"
1.使用Shell指令碼列印,系統版本、核心版本平臺、虛擬平臺、靜態主機名、eth0網路卡IP地址、lo網路卡IP地址、當前主機的外網IP地址
curl icanhazip.com 或者 curl ifconfig.me #當前主機的外網IP地址 awk '{print$1,$4}' /etc/redhat-release #系統版本資訊 hostnamectl | awk '/Kernel/{print $3}' #Kernel核心版本資訊 hostnamectl | awk '/Virtua/{print $2}' #虛擬平臺 hostnamectl | awk '/hostname/{print $3}' #靜態主機名 ifconfig eth0|awk 'NR==2{print $2}' #eth0網路卡IP地址 ifconfig lo|awk 'NR==2{print $2}' #lo網路卡IP地址 [root@shell01 scripts]# vim var.sh #!/bin/bash Version=$(awk '{print$1,$4}' /etc/redhat-release) Kernel=$(hostnamectl | awk '/Kernel/{print $3}') Vm=$(hostnamectl | awk '/Virtua/{print $2}') Static_Hostname=$(hostnamectl | awk '/hostname/{print $3}') Eth0=$(ifconfig eth0|awk 'NR==2{print $2}') Lo=$(ifconfig lo|awk 'NR==2{print $2}') Wan=$(curl -s ifconfig.me) #-s:不輸出錯誤和進度資訊 echo "當前系統版本號為: $Version" echo "當前系統核心版本號為: ${Kernel%.e*}" echo "當前系統虛擬化平臺為: $Vm" echo "當前系統靜態主機名為: $Static_Hostname" echo "當前系統的Eth0網路卡IP地址為: $Eth0" echo "當前系統的Lo網路卡IP地址為: $Lo" echo "當前系統的外網IP地址為: $Wan" ---------------------------------------------------- 2.需求描述:變數string="Bigdata process is Hadoop, Hadoop is open source project",執行指令碼後,列印輸出string變數,並給出使用者以下選項: #需求 1)列印string長度 2)刪除字串中的所有Hadoop 3)替換第一個Hadoop為Linux 4)替換全部Hadoop為Linux 使用者請輸入數字1|2|3|4,可以執行對應項的功能。 [root@shell01 scripts]# vim var-1.sh #!/bin/bash #1.定義變數 String='Bigdata process is Hadoop, Hadoop is open source project' #2.列印變數 echo $String #3.輸出選單 cat<<EOF 1)列印string長度 2)刪除字串中的所有Hadoop 3)替換第一個Hadoop為Linux 4)替換全部Hadoop為Linux EOF #4.提示使用者輸入對應的數字,執行對應的功能 read -p "請輸入上方選單對應的數字,執行對應的功能[1|2|3|4]: " Num #5.根據使用者輸入的數字進行執行對應的功能 if [ $Num -eq 1 ];then echo "列印string長度" echo ${#String} fi if [ $Num -eq 2 ];then echo "刪除字串中的所有Hadoop" echo ${#String//Hadoop/} fi if [ $Num -eq 3 ];then echo "替換變數中第一個Hadoop為Linux" echo ${#String/Hadoop/Linux} fi if [ $Num -eq 4 ];then echo "替換變數中全部Hadoop為Linux" echo ${#String//Hadoop/Linux} fi