腳本編寫及常見運算
一.算術運算符及相關體驗
<變量>++ 增量後 (先返回變量再進行運算)
<變量>-- 減量後
- 減法
例:
[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 比較哪個文件的時間戳更舊一些