shell编程中的运算 | shell脚本应用综合示例

一,运算方式及运算符号


二,常用的运算命令

区别

$[ ]    用与整数计算

${ }    用于区别变量和常量 sed -n "${i}p" passwd 打印passwd的第i行,这里p是打印,sed的参数,${}用于区别i和p

$( )    用于给变量负责,相当于两个反向单引号``

示例:

[root@station mnt]# (( a=1+1 ))
[root@station mnt]# echo $a
2
[root@station mnt]# let b=1+1
[root@station mnt]# echo $b
2
[root@station mnt]# expr 5 + 2    ####每个字符必须要隔开
7
[root@station mnt]# d=$[1+3]
[root@station mnt]# echo $d
4
[root@station mnt]# bc           ####linux自带的小型计算器
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
2*5
10
[root@station mnt]# echo $[2**3]
8

三,shell编程

1,写一个10s倒计时脚本

###-n表示不换行,也就是说下一行开头在本行字符串结束的位置,-e表示对\转义

###注意:这里"\r$TIME \r"要加一个空格,否则输出格式有问题

2,写一个1min10s的倒计时

###这里for ((;sec>0;SEC--)),因为前面SEC已经定义过了,而且有值,所以这里第一个;前面就不用定义

3,写一个脚本做计算器

###这里直接借助Linux自带的bc计算器,通过标准输入到bc里面


四,shell脚本应用示例

1,用户管理

建立自动登陆脚本,要求登陆多台主机,登陆成功后使用userfile和passwdfile建立用户,如果用户存在,显示用户存在,并且按照passwdfile修改用户密码。



注意:1,Auto_Contion是一个自动连接函数,它有一个参数,函数内部的$1是调用函数时后面跟的第一个字符串,$NUM是for循环的变量,是直接可以传递到函数内部的。

2,如果运行脚本时,没有报语法错误,但是没有执行结果,那么可能要增大set timeout 20的值。

测试:

成功!!!

2,数据库备份

执行 db_dump.sh westos( 数据库密码 )
脚本执行后会备份数据库中的所有库到/mnt/mysqldump目录中,备份文件名称为 “库名称 .sql” 当此文件存在时报错并询问动作,输入“ S” 跳过备份,当输入“ B" 时备份“库名称 .sql” 文件为“库名称 _backup.sql”, 当输入“ O” 时,覆盖源文件,输入exit时退出,


注意:1,mysql -e 可执行命令 -E 垂直打印查询(行)的输出 -N 不要在结果中写入列名

2,ACTION_CMD是.sql文件存在时,执行哪种动作的函数

测试:

成功!!!

3,自动登陆脚本

执行 auto_ssh.sh 172.25.254.100 westos,172.25.254.100 为 ip,westos 为密码
执行脚本后自动登陆 172.25.254.100 并保持登陆

示例1(可以登陆,并且保持登陆,但是不能执行命令,否则卡住)

测试

注意:把示例1的expect eof 改为interact,无法连接

示例2(可以登陆,并且保持登陆,并且可以执行命令,但是必须是expect调用)

测试


4,批处理脚本

检测开启的所有主机,并抓取所有主机的值机名称和 ip的对应列表,把列表保存在 /mnt/ip_host.list 文件中

注意:1,为了方便看现象,如果成功导入到ip_host.sh,那么打印Successfully !!,如果主机没有启动,报错

2,for循环的变量i是可以传到AUTO_CONNECT里面的,for循环的$1和函数里面的$1含义不一样,内容一样

3,如果脚本执行本身没有语法错误,没有结果的可能原因是set timeout的值不够大

测试


5,服务自动部署示例

执行脚本 lamp.sh,脚本执行后部署好论坛,并设定 apache 的网络接口为 8080

注意:1,防火墙和SElinux要关闭

2,数据库的安装通过yum info的信息自动判断,如果要安装,也需要设置密码

3,打开8080端口的格式

4,unzip的参数-q是安静模式,不产生解压信息,-d是解压到的目录

测试:

重置虚拟机,配置IP,YUM源,scp传送脚本(/mnt/)和软件包(/opt/)


猜你喜欢

转载自blog.csdn.net/ha_weii/article/details/80829840
今日推荐