首页 > 代码库 > shell
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 比较哪个文件的时间戳更旧一些
本文出自 “12288655” 博客,谢绝转载!
shell