shell

腳本編寫及常見運算

 

.算術運算符及相關體驗

 

<變量>++ 增量後  (先返回變量再進行運算)

<變量>-- 減量後

- 減法

例:

[root@web1 ~]# echo $[1-2]

-1

+ 加法

例:

[root@web1 ~]# echo $[1+2]

3

** 冪運算

例:

[root@web1 ~]# echo $[2**2]

4

* 乘法

例:

[root@web1 ~]# echo $[2*3]

6

/ 除法(取整) ##只取整數部分

例:

[root@web1 ~]# echo $[10/2]

5

[root@web1 ~]# echo $[10/4]

2

% 餘數(取餘)

例:

[root@web1 ~]# echo $[10%4]

2

[root@web1 ~]# echo $[10%8]

2

+= 加等

例:

[root@web1 ~]# i=1;j=2;echo $[j+=i]

3 ##i=1 j+=i <=> j=j+i ##j+=i就是之前的j加i等於現在的j

 

-= 減等

例:

[root@web1 ~]# i=1;j=3;echo $[j-=i]

2 ##i=1 j-=i <=> j=j-i ##j-=i就是之前的j減i等於現在的j

 

實驗1.++和+=的體驗

[root@web1 ~]# vim ty.sh ##i=1 i<10 j+=i j=1 i++ i=2

#!/bin/bash ##i=2 i<10 j+=i j=3 i++ i=3

for ((i=1;i<10;i++)) ##......

do ##i=9 i<10 j+=i j=45 i++ i=10

        ((j+=i)) ##i=10 i<10不成立  j=45

done

        echo $j

[root@web1 ~]# sh ty.sh

45

實驗2.變量++體驗

[root@web1 ~]# vim ty2.sh

#!/bin/bash

for ((i=1;i<10;i++))

do

        echo $i

done

[root@web1 ~]# sh ty2.sh

1

2

3

4

5

6

7

8

9

實驗3.變量--體驗

[root@web1 ~]# vim ty3.sh

#!/bin/bash

for ((i=1;i>-10;i--))

do

        echo $i

done

[root@web1 ~]# sh ty3.sh

1

0

-1

-2

-3

-4

-5

-6

-7

-8

-9

實驗4.簡單體驗for do done語句

[root@web1 ~]# vim ty1.sh

#!/bin/bash

for NAME  in tom jack westos

do

        echo this is $NAME

done

[root@web1 ~]# sh ty1.sh

this is tom

this is jack

this is westos

.一些簡單的腳本

 

##實驗1.##

十秒倒計時

大神作品

[root@web1 ~]# vim 已瘋十秒.sh

#!/bin/bash

for ((SEC=10;SEC>0;SEC--)) ##SEC初值爲10,做SEC--(遞減),範圍爲SEC>0,SEC減到0,則自動終止運算

do

echo -ne "After ${SEC}s is red " ##-ne e支持反斜槓轉義 ,n不換行

echo -ne "\r    \r" ##覆蓋之前的執行結果

sleep 1 ##每隔一秒,顯示新的命令執行結果

done

 

[root@web1 ~]# sh 已瘋十秒.sh

After 9s is red

[root@web1 ~]# ##執行完會自動退出

##實驗2.##

一分十秒倒計時

大神作品(C語言代碼)

[root@web1 ~]# vim 一分十秒.sh

#!/bin/bash

for((i=1;i>=0;i--));do

        if [ $i -ne 1 ];then

                let j=59

        else

                let j=10

        fi

        for((;j>=0;j--));do

                echo -ne "${i}min ${j}sec"

                sleep 1

                echo -ne "\r    \r"

        done

done

echo -e "bone!"   ##轉義到bone

執行結果

[root@web1 ~]# sh 一分十秒.sh

0min 59sec

[root@web1 ~]# sh 一分十秒.sh

bone!0secc

老師作品(liunx代碼)

#!/bin/bash

M=1

for ((SEC=10;SEC>=0;SEC--))

do

echo -ne "After 0${M}:${SEC}s 李老師會瘋"

sleep 1

echo -ne "\r    \r"

 

        while [ "$SEC" -le "0" -a "$M" -gt "0" ]

        do

        echo -ne "After ${M}:${SEC}s 李老師會瘋"

        echo -ne "\r    \r"

        ((M--))

        SEC=60

        done

 

done

[root@web1 ~]# sh 已瘋十秒.sh

After 00:44s 李老師會瘋

 

 

##實驗3.##

ping15-23 看哪臺可以ping通 哪些ping不通

大神作品1

[root@web1 ~]# vim ty4.sh

#!/bin/bash

for ((i=15;i<=23;i++))

do

        ping -c 1 172.25.254.$i &> /dev/null

        if [[ $? -eq 0 ]]

        then

                echo -e '\e[1;32m' "172.25.254.${i} is up" '\e[1;0m'

        else

                echo -e '\e[1;41m' "172.25.254.${i} is down" '\e[1;0m'

        fi

done

[root@web1 ~]# sh ty4.sh

 172.25.254.15 is down

 172.25.254.16 is down

 172.25.254.17 is down

 172.25.254.18 is down

 172.25.254.19 is down

 172.25.254.20 is up

 172.25.254.21 is up

 172.25.254.22 is down

 172.25.254.23 is down

大神作品2

[root@web1 ~]# vim ty5.sh

#!/bin/bash

for NUM in {15..23}

do

        ping -cl -wl 172.25.254.$NUM &> /dev/null

        while

                [ "$?" -eq "0" ]

        do

                echo 172.25.254.$NUM is up

        break

        done

        echo 172.25.254.$NUM is down

done

~                 

[root@web1 ~]# sh ty5.sh

172.25.254.15 is down

172.25.254.16 is down

172.25.254.17 is down

172.25.254.18 is down

172.25.254.19 is down

172.25.254.20 is down

172.25.254.21 is down

172.25.254.22 is down

172.25.254.23 is down

 

老師作品

[root@web1 ~]# vim ty6.sh

#!/bin/bash

for NUM in {15..23}

do

ping -cl -wl 172.25.254.$NUM &> /dev/null && echo 172.25.254.$NUM is up || echo

172.25.254.$NUM is down

done

 

[root@web1 ~]# sh ty6.sh

172.25.254.15 is down

172.25.254.16 is down

172.25.254.17 is down

172.25.254.18 is down

172.25.254.19 is down

172.25.254.20 is down

172.25.254.21 is down

172.25.254.22 is down

172.25.254.23 is down

 

實驗4.

數據庫相關實驗

[root@web1 ~]# systemctl start mariadb ##開啓mariadb服務

[root@web1 ~]# mysql -uroot -p123 -e "show databases;" ##查看已有數據庫

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| saozhu             |

| ultrax             |

+--------------------+

 

[root@web1 ~]# mysql -uroot -p123 -Ne "show databases;" ##去掉標題

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| saozhu             |

| ultrax             |

+--------------------+

 

[root@web1 ~]# mysql -uroot -p123 -e "show databases;" -NE   ##以行的形式顯示數據庫列表

*************************** 1. row ***************************

information_schema

*************************** 2. row ***************************

mysql

*************************** 3. row ***************************

performance_schema

*************************** 4. row ***************************

saozhu

*************************** 5. row ***************************

ultrax

 

 

[root@web1 ~]# mysql -uroot -p123 -e "show databases;" -NE | grep ^\* -v

information_schema

mysql

performance_schema

saozhu

ultrax

 

 

 

[root@web1 ~]# mysql -uroot -p123 -e "show databases;" -NE | grep -E "^\*|schema$" -v

mysql

saozhu

ultrax

 

腳本

[root@web1 ~]# vim 拉閘.sh

#!/bin/bash

 

for x in $(mysql -uroot -p123 -e "show databases;"      -NE | grep -E "^\*|schema$" -v)

do

        mysqldump -uroot -p123 $x > /mnt/$x-`date`.dump

done

 

[root@web1 ~]# sh 拉閘.sh

mysql

saozhu

ultrax

 

實驗5.

幾個符號的作用演示體驗

[root@web1 ~]# vim 拉閘1.sh

#!/bin/bash

echo $1 ##顯示輸入的第一個內容

echo $2

echo $3

echo $4

echo $5

echo $6

echo $* ##顯示輸入的所有內容

echo $# ##統計輸入的內容的個數

 

**添加:**

echo $@ ##echo $@和echo $*的作用是一樣噠

測試:

[root@web1 ~]# sh 拉閘1.sh ##此時未輸入任何內容所以沒有任何顯示,輸入內容的個數爲空

 

 

 

 

 

 

[root@web1 ~]# sh 拉閘1.sh wqd ##此時輸入wqd

wqd ##echo $1顯示了輸入的第一個內容,爲wqd

 

 

 

 

 

wqd ##輸入的所有內容爲wqd

1 ##輸入內容的個數爲1

[root@web1 ~]# sh 拉閘1.sh wqd edwqeqwr qwe ##此時輸入wqd,edwqeqwr,qwe

wqd ##echo $1顯示了輸入的第一個內容,爲wqd

edwqeqwr ##echo $2顯示了輸入的第二個內容,爲edwqeqwr

qwe ##echo $3顯示了輸入的第三個內容,爲qwe

 

 

 

wqd edwqeqwr qwe ##輸入的所有內容爲wqd,edwqeqwr

3 ##輸入內容的個數爲3

 

實驗6.

只顯示當前主機ip地址

[root@web1 ~]# vim ty9.sh

#!/bin/bash

ifconfig eth0 | grep inet | grep inet6 -v | cut -d " " -f 10

 

[root@web1 ~]# sh ty9.sh

172.25.254.120

 

[root@web1 ~]# vim ty10.sh

#!/bin/bash

ping -c1 -w1 $@ &> /dev/null && echo 172.25.254.$NUM is up || echo 172.25.254.

      此處是1

$NUM is down

[root@web1 ~]# sh ty10.sh 172.25.254.20

172.25.254. is up

[root@web1 ~]# sh ty10.sh 172.25.254.18

172.25.254. is up

[root@web1 ~]# sh ty10.sh 172.25.254.19

172.25.254. is down

實驗7.

 

[root@web1 ~]# vim ty11.sh

#!/bin/bash

read -p "Please input a interface:" ETH

ifconfig $ETH | grep inet | grep inet6 -v | cut -d " " -f 10

 

[root@web1 ~]# sh ty11.sh

Please input a interface:eth0

172.25.254.120

[root@web1 ~]# sh ty11.sh

Please input a interface:eth1

eth1: error fetching interface information: Device not found

實驗8.

建立用戶設置密碼

[root@web1 ~]# vim ty12.sh

#!/bin/bash

read -p "Please input you want create username:" NAME

read -p "Please input ${NAME}'s password:" -s PASS

useradd $NAME

echo $PASS | passwd --stdin $NAME &> /dev/null && (

        echo "created $NAME and seted it password" ) ||

        echo error

 

[root@web1 ~]# sh ty12.sh

Please input you want create username:yz

Please input yz's password:created yz and seted it password

實驗9.

輸入ip顯示主機是否開啓,不輸入報錯

[root@web1 ~]# vim ty13.sh

#!/bin/bash

[ -n "$*" ] && (

ping -c1 -w1 $* &> /dev/null && echo $* is up || echo $* is down

)||(

echo please give me a ip address

)

[root@web1 ~]# sh ty13.sh ##此時未輸入ip,報錯

please give me a ip address

[root@web1 ~]# sh ty13.sh 172.25.254.20 ##輸入ip

172.25.254.20 is up

[root@web1 ~]# sh ty13.sh 172.25.254.19

172.25.254.19 is down

[root@web1 ~]# sh ty13.sh 172.25.254.120

172.25.254.120 is up

實驗10.

輸入一個數,看它是否在1-10之內,在輸出yes,不在輸出no

[root@web1 ~]# vim ty14.sh

[root@web1 ~]# cat ty14.sh

#!/bin/bash

read -p "please input a number:" NUM

if

[ "$NUM" -ge "0" -a "$NUM" -le "10" ]

then

echo yes

else

echo no

fi

[root@web1 ~]# sh ty14.sh

please input a number:10

yes

[root@web1 ~]# sh ty14.sh

please input a number:200

no

實驗11.

輸入一個文件,看它是否存在,如果存在顯示它的文件類型

[root@web1 ~]# vim ty15.sh

#!/bin/bash

if

[ -e "$1" ]

then

[ -f "$1" -a ! -L "$1" ] && echo $1 is a file

[ -b "$1" ] && echo $1 is a block

[ -c "$1" ] && echo $1 is a count

[ -d "$1" ] && echo $1 is a directory

[ -L "$1" ] && echo $1 is a lik

else

[ -n "$1" ] && echo "please input give me a file" || echo $1 is not exist

fi

 

[root@web1 ~]# sh ty15.sh  /var/www/html/index.html

/var/www/html/index.html is a file

[root@web1 ~]# sh ty15.sh  /var/www/html/cgi

/var/www/html/cgi is a directory

補充:

-ef 查看兩個文件節點號是否一致

-nt 比較哪個文件的時間戳更新一些

-ot 比較哪個文件的時間戳更舊一些

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章