”所谓没有规矩不成方圆 下面说一下shell脚本的一些固定模式 “
一、脚本的基本规则
1、先说文件名 简明扼要 尽量见名之意 第一位数禁止用数字
2、文件名要以 “.sh ”结尾(注意有个点)
3、脚本第一行必须包括shell生命序列 “#!” 例“#!/bin/bash” 给予执行权限 在命令行上指定脚本的绝对路经或相对路经(第一行可写可不写 但是作为一个有素养的运维人 必须写!!)
4、接着开始写注释内容:文件名、功能描述、作者及联系方式、最后修改日期、版本号以及一些说明。
二、脚本编程逻辑处理方式
1、顺序执行
2、循环执行
3、选择执行
三、接下来就是堆命令的过程
1、变量命名不能使用程序中的保留字:例 if 、for。只能使用字母数字及下划线,同样不能使用数字开头
2、位置变量 (这是一个很方便的技能)
$0、 $1、$2、$3... $#
文件名 传递的第一、二、三..个参数 传递给脚本的参数个数
$* [email protected]
传递给脚本的所有参数,全部参数合为一个字符串 传递给脚本的所有参数,每个参数为独立字串 注:“$*” 和 “[email protected] ”不容易分清区别 只有被双引号包起来的时候才会看出来差异
set 清空所有位置变量
3、算数运算
几个运算符号 : +、-、*、/、%取模(取余)、**乘方(运算符号有些场景需要转义)
两个算术例子 固定格式
*例: let r=9+9
查看运算结果 echo $r
*例:r=$((9+9))
查看运算结果 echo $r
$RANDOM 随机生成一串数字(0-32767)之内的
*例 echo $[$RANDOM%50]
取0-49之间的任意一位数
4、增强型赋值
增强型运算符号 +=、-=、*=、/=、%=
*例 let count+=3
自加3后赋值
*例 let var++
默认自加1
5、bash的测试类型 字符串测试
-gt:是否大于 == ; 是否等于
-ge:是否大于等于 > : ascii码是否大于asscii
-eq:是否等于 < :是否小于
-ne:是否不等于 != :是否不等于
-lt:是否小于 =~:左侧字符串是否能够被右侧的PATTERN所匹配
-le:是否小于等于
-z :测试字符串是否为空,不空为假,空则为真
-n:测试字符串是否不空,不空为真,空则为假
6、使用read命令来接受输入
-p: 输出显示到屏幕
-s:静默输出(一般密码之类的会用到)
例: reda -p "Enteer a filename:" FILE 注意FILE前面一定要加空格
7、字符串切片
先设置一个变量 myname="/usr/sbin/ntpdate"
*字符串长度测试
echo ${#maname}
1
查看设置的字符串长度 后面会显示总共17个 “/”也算
*变量高级操作
例:echo ${myname#/*/}
sbin/ntpdate
*一个“#”号由前面对比 删除匹配到最短的
例:echo ${myname##/*/}
ntpdate
*两个“#”号由前面对比 删除匹配到最长的
例:echo ${myname%/*}
/usr/sbin
*一个“%”由后面对比 删除匹配到的最短的
例:echo ${myname%%/*}
(空)
两个“%”由后面对比 删除匹配到的最长的
8、流程控制(if、for、while)
**if语句格式及举例
if (command1条件1);then
如果条件1执行失败执行条件2 例(1<1)是错的
(if-flase失败)执行动作
elif (command2条件2)
条件2执行失败 例(1>1)
(if-flase)执行动作
else
(则直接执行条件3可以不用加执行条件 例(1=1)
(if-true成功)执行动作
fi(结束符)
**for语句格式及示例
for i in {1..10};do
给i设置变量等于1~10 (切记“i”不能加$符号)
useradd user${i}
创建十个用户 user1、user2、user3.....
done(结束符)
**while语句格式及示例
while true;do
如果条件为真 则继续执行
echo {1..100}
显示1~100 重复循环执行 除非手动停止
done 结束符
四、总结小技巧
*如果命令太长可以用“\”分行来写
*shell脚本不要求缩进,但是要养成缩进的好习惯
*可以把定义的环境变量专门写到一个文件里,避免修改系统文件
*关键的操作须有日志输出,专门记录操作的成功或者失败以及执行的时间
*脚本内很可能包含敏感信息,如果公开之前一定要确认是否已经删除
*尽量给每条语句或者代码的执行给一个执行结果状态
*建议在脚本执行的开始重读下/etc/profile 推荐使用source 或者"."
*脚本内定义的变量或者文件名尽量使用“驼峰写法”见名之意避免使用a、b、c类似的定义
*另外写脚本有三个技巧多写多练 、多写多练、多写多练,就这些。