您的位置:首页 > 运维架构 > Shell

shell 脚本学习七

2015-09-28 21:21 666 查看
产生uuid 的方法 cat /proc/sys/kernel/random/uuid

xxxxx; done|sort|uniq -c|sort| -nk1 排序,去重,排序 按照数字大小 按照第一个区间排序

添加ip地址的命令 ifconfig eth0:1 10.0.2.15 netmask 255.255.240.0 up

查看结果 ifconfig eth0:1

函数名(){

指令...

return n

}

或者

function 函数名(){

指令...

return n

}

调用执行 ,直接函数名就可以了,不用带小括号
如果有参数,就函数名 参数1 参数2 ....

父脚本的参数则临时的被函数参数隐藏

$0 比较特殊,他仍然是父脚本的名称

重启网卡,重启服务在生产环境里都是不允许的。。。必须要平滑

[ -x mmmmmmm ] 条件表达式表示如果mmmmmm可以被执行的判断

wget -T 10 --tries=1 --spider http://${1} >/dev/null 2>&1 #tries=1 表示尝试一次

cat >$scripts_path/domain.list<<EOF

aaaaaaa

bbbbbbb

cccccccc

EOF

把多行内容加入文件

给提示内容加颜色,在脚本头部引入 . /etc/init.d/functions 加载函数库

在加颜色内容的部分 action 'success' /bin/true

如何优化linux 系统

1、精简安装包(最小化安装)

2、配置国内高速yum 源

3、禁止卡机不需要启动的服务

4、优化内核参数/etc/sysctl.conf

5、增加系统文件描述符,堆栈等配置

6、禁止root 远程登陆,修改ssh 端口为特殊端口,禁止dns,空密码

7、有外网ip 的机器要开启配置防火墙,仅对外开启需要提供服务的端口,配置或者关闭selinux

8、清除无用的默认系统账户和组(非必需)(添加运维成员的用户)

9、锁定敏感文件,如/etc/passwd (非必须) chattr +i /etc/passwd 把文件锁起来 查看 lsattr /etc/passwd

10、配置服务器和互联网时间同步

11、配置sudo 对普通用户权限精细控制

12、把以上内容写成一键优化脚本

[[ “$(whoami)”!="root" ]];then 判断当前用户是不是root

SERVICE=`which service` 反引号 里面的是命令

CHKCONFIG=`which chkconfig` 反引号 里面的是命令

sed -i 's/xxxx/yyyy/g' zzzzz 查找zzzz文件中含有xxxxx 行的地方替换为yyyyyy 其中中间的三个/x/y/ 可以换成其他的 如#x#y# 或者%x%y%

array=(1 2 3)

echo ${#array[@]} 求数组长度

数组下标从0开始 echo ${array[0]}

全部打印 echo ${array[@]}

弱类型的数组直接“赋值”就可以实现增加和修改了

删除用unset 关键字 可以unset全部 如 unset array 也可以unset 特定的一个 unset array[0]

数组替换 echo ${array[@]/5/6} 把数组所有内容为5的替换成6

或者用key--value 的形式定义

array=([1]=one [2]=two [3]=three)

也可以用程序的方式 array=($(ls))

curl -o /dev/null -s -w "%{http_code}" www.baidu.com -w 参数可以直接取出httpcode 字段

mysql主从同步看 slave 的 IO_running和sql_runing 和Second_Behind_Master 延迟秒数

grant replication slave on *.* to oldboy @'10.0.0.%' identified by 'oldboy';

flush privileges;

select user,host from mysql.user;

取出last_error 当错误号是1007 1053 1062 1213 1158 1159 1008 这些错误号 被认定不影响主从同步

所以操作办法是:stop slave ; set global sql_slave_skip_counter=1; slave start; 自动处理

1005:创建表失败

1006:创建数据库失败

1007:数据库已存在,创建数据库失败

1008:数据库不存在,删除数据库失败

1009:不能删除数据库文件导致删除数据库失败

1010:不能删除数据目录导致删除数据库失败

1011:删除数据库文件失败

1012:不能读取系统表中的记录

1020:记录已被其他用户修改

1021:硬盘剩余空间不足,请加大硬盘可用空间

1022:关键字重复,更改记录失败

1023:关闭时发生错误

1024:读文件错误

1025:更改名字时发生错误

1026:写文件错误

1032:记录不存在

1036:数据表是只读的,不能对它进行修改

1037:系统内存不足,请重启数据库或重启服务器

1038:用于排序的内存不足,请增大排序缓冲区

1040:已到达数据库的最大连接数,请加大数据库可用连接数

1041:系统内存不足

1042:无效的主机名

1043:无效连接

1044:当前用户没有访问数据库的权限

1045:不能连接数据库,用户名或密码错误

1048:字段不能为空

1049:数据库不存在

1050:数据表已存在

1051:数据表不存在

1054:字段不存在 (SQLSTATE: 42S22 )

1065:无效的SQL语句,SQL语句为空

1081:不能建立Socket连接

1114:数据表已满,不能容纳任何记录

1116:打开的数据表太多

1129:数据库出现异常,请重启数据库

1130:连接数据库失败,没有连接数据库的权限

1133:数据库用户不存在

1141:当前用户无权访问数据库

1142:当前用户无权访问数据表

1143:当前用户无权访问数据表中的字段

1146:数据表不存在

1147:未定义用户对数据表的访问权限

1149:SQL语句语法错误

1158:网络错误,出现读错误,请检查网络连接状况

1159:网络错误,读超时,请检查网络连接状况

1160:网络错误,出现写错误,请检查网络连接状况

1161:网络错误,写超时,请检查网络连接状况

1062:字段值重复,入库失败

1064:语法错误,常见的比如注释-- 后没加空格

1169:字段值重复,更新记录失败

1177:打开数据表失败

1180:提交事务失败

1181:回滚事务失败

1193:变量没声明,常在写存储过程时发生

1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库

1205:加锁超时

1211:当前用户没有创建用户的权限

1216:外键约束检查失败,更新子表记录失败

1217:外键约束检查失败,删除或修改主表记录失败

1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器

1227:权限不足,您无权进行此操作

1235:MySQL版本过低,不具有本功能

检查脚本明明没有问题,但是就是出现错误,就要执行dos2unix 把格式转换一下。。。。

因为dos 环境下,每一次换行都会带上一个"^M" 这在unix下是错误字符的

bash -n xxxxx 不会执行该脚本,仅仅查询脚本语法是否有问题,并给出提示

bash -x xxxxx 将执行的脚本内容及输出显示到屏幕上

通bash 一样,开启调试用set -x 命令 ,而关闭调试功能用set +x ,

把需要调试的部分夹在 bash -x 和bash +x 之间就好了,缩小调试作用域

bashdb 为shell 专用的调试器

kill -l 打印出信号处理名称

或者 trap -l

格式是:trap command signal 捕获到signal 执行 command

trap “” 1 2 3 20 15 或者 trap “” HUP INT QUIT TSTP

stty -a 列出中断信号与键盘之间的关系

屏蔽中断 trap “” 2 恢复中断 trap “:” 2

seq 64 和 {1..64} 一样的

跳板机:(触发信号后屏蔽信号)

方法一:

1、首先做好ssh key 验证

2、实现传统的远程连接菜单选择脚本

3、利用linux 信号防止用户在跳板机上操作

4、用户登陆后即调用脚本

定义变量在函数里用local 关键字
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: