Shell基礎整理一

2021-08-30 11:34:12 字數 4752 閱讀 9822

僅以此章記錄曾經奮鬥的歲月

//位置變數$1,$2

#!/bin/bash

ip=$1

ping ip && echo "ping $ip is up" || echo "ping $ip is down"

//演示位置變數$1

[root@localhost ~]# sh ping.sh 192.999.999.999 114.114.114.114

ping 192.999.999.999 is down

[root@localhost ~]#

//演示位置變數$2

#!/bin/bash

ip=$2

ping ip && echo "ping $ip is up" || echo "ping $ip is down"

[root@localhost ~]# sh ping.sh 192.999.999.999 114.114.114.114

ping 114.114.114.114 is up

[root@localhost ~]#

$0      指令碼名

&* 所有的引數

$@ 所有的引數

$# 引數的個數

$$ 當前程序的pid

$! 後台執行的最後乙個程序的pid

$? 上乙個命名執行的結果,0表示成功

$- 顯示shell使用的當前選項

$_ 之前命令的最後乙個引數

//案例:指令碼後面加上需要ping的ip

#!/usr/bin/bash

if [ $# -eq 0 ];then

echo "usage: $(basename $0) file" #basename去除路徑只顯示當前檔名

exit

fiif [ ! -f $1 ];then

echo "$1 is not file"

exit

fifor ip in $(cat ip.txt)

do ping -c1 $ip &>/dev/null

if [ $? -eq 0 ];then

echo "$ip is up"

else

echo "$ip is down"

fidone

[root@mysql-master /soft/scripts]# sh ping.sh ip.txt

192.168.1.4 is up

192.168.1.3 is down

192.168.1.16 is up

192.168.1.17 is up

[root@mysql-master /soft/scripts]#

//方法一: expr

[root@mysql-master ~]# expr 2 \* 2 // + #### \* /

4[root@mysql-master ~]# expr 4 / 2

2//方法二:$(($num1+$num2))

[root@mysql-master ~]# echo $((2*4)) // + #### * \

8[root@mysql-master ~]# echo $((4/2))

2案例:輸出記憶體占用百分百

#!/usr/bin/bash

mem_used=`free -m|grep "^mem"|awk ''`

mem_total=`free -m|grep "^mem"|awk ''`

mem_percent=$((mem_used*100/mem_total))

echo "memory used: $mem_percent"

//方法三:let

[root@mysql-master ~]# let sum=2*3 ;echo $sum

6[root@mysql-master ~]# let i++;echo $i

1[root@mysql-master ~]#

案例:連續ping 192.168.1.16 ~ 192.168.1.18

#!/usr/bin/bash

i=16

while [ $i -le 18 ]

do ip=192.168.1.$i

ping -c1 $ip &>/dev/null

if [ $? -eq 0 ];then

echo "$ip is up"

else

echo "$ip is down"

filet i++

done

//方法四:$

[root@mysql-master ~]# echo $[2*3]

6[root@mysql-master ~]# echo $[4/2]

2[root@mysql-master ~]#

echo "3*5"|bc

echo "scale=2;6/4"|bc

[root@mysql-master ~]# awk "begin"

0.5[root@mysql-master ~]# awk 'begin'

0.5[root@mysql-master ~]# echo "print 1.5/2"|python

0.75

[root@mysql-master ~]# echo 'print 1.5/2'|python

0.75

[root@mysql-master ~]#

並不會真正的對變數做修改,只是引用

// 變數的「刪除」

[root@mysql-master ~]# url=www.sina.com.cn

[root@mysql-master ~]# echo $ #獲取變數長度

15[root@mysql-master ~]# echo $ #從前往後匹配到第乙個.「刪除」匹配的內容

sina.com.cn

[root@mysql-master ~]# echo $ #從前往後匹配到最後乙個.「刪除」匹配內容

cn[root@mysql-master ~]# echo $ #從後往前匹配到第乙個.「刪除」匹配內容

www.sina.com

[root@mysql-master ~]# echo $ #從後往前匹配到最後乙個.「刪除」匹配內容

www[root@mysql-master ~]# echo $url

www.sina.com.cn

[root@mysql-master ~]#

// 變數的「替換」

[root@mysql-master ~]# echo $

www.sina.com.cn

[root@mysql-master ~]# echo $

www.sina.com.cn

[root@mysql-master ~]#

//變數的替代:$,若變數有被賦值(包括空值)則不會被替代

[root@mysql-master ~]# echo $ #沒被定義過得變數

[root@mysql-master ~]# echo $ #被替代成www

www[root@mysql-master ~]# echo $ #被定義過則無法替代

www.sina.com.cn

[root@mysql-master ~]# echo $ # :#### 未被定義過(包括空值)會把替代

ccc[root@mysql-master ~]# echo $

ccc[root@mysql-master ~]# echo $ # :-已經存在的無法被替代

www.sina.com.cn

[root@mysql-master ~]# echo $

[root@mysql-master ~]# echo $ # :=若沒有定義或空值則給變數賦值

111[root@mysql-master ~]# echo $

111[root@mysql-master ~]#

總結:$,若變數有被賦值(包括空值)則不會被替代

$,若變數未定義(包括定義但為賦值空值)則也會被替代,但是不會被賦值

$,若變數未定義,則給變數賦值;若有被定義或為空值,則替代但不會賦值

$, 若變數未定義(包括定義但為賦值空值),則會給變數賦值;若已經有值則不會發生變化

只要是變數有值了,上面的任何操作都不會對變數產生任何變化,不能耍流氓!

* 適用於我想要你給個初始值,但是你沒有給,那我就給你個預設值

// www.sina.com.cn

// 0123456789 變數對應的索引位置,從0開始計數

[root@mysql-master ~]# echo $

www.sina.com.cn

[root@mysql-master ~]# echo $ #從第4個數開始擷取5個長度

.sina

[root@mysql-master ~]# echo $ #從第5個數開始擷取4個長度

sina

[root@mysql-master ~]# echo $ #從第4個數開始擷取後面所有

sina.com.cn

[root@mysql-master ~]#

shell 基礎整理

shell 基礎整理 1,指令碼檔名以 sh 2,命名變數 1 自定義變數 name zhangsan 2 evn 大小寫字母 3 echo name echo path 4 作用域 預設自定義變數 區域性 通過呼叫多個shell程序 開啟shell 父 再次開啟shell 子 env shlvl ...

Shell基礎整理

shell的作用是將使用者輸入的文字命令轉換成核心能識別的資料指令交給核心進行執行,核心需要翻譯成二進位制交由cpu底層來執行 使用者層 shell 呼叫對應應用程式 kernel 硬體層 運算和周邊外設 傳遞給kernal 應用程式 shell 使用者 shell就是底層命令直譯器,shell就是...

shell基礎整理

學習整理 參考部落格 shell是一種指令碼語言,常見的指令碼直譯器有 定義變數 number 100 country china 使用變數 在定義過的變數前面加上 符號就可以了。另外,對於變數的 是可以選擇的,幫助直譯器識別變數的邊界。echo number echo i love my coun...