shell 脚本学习七

来源:互联网 发布:写关于宿舍知乎 编辑:程序博客网 时间:2024/06/06 02:08

产生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 关键字














0 0