一,运算方式及运算符号
二,常用的运算命令
区别
$[ ] 用与整数计算
${ } 用于区别变量和常量 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/)