- Vim编辑器
- Shell脚本
- 流程控制语句
- 计划任务服务程序
Vim编辑器
1.Vim三种模式
命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作
输入模式:正常的文本录入(也称编辑模式)
末行模式:保存或退出文档,以及设置编辑环境
默认进入文件是在命令模式下, a i o 三个任意键 进入输入模式
o 在光标下一行输入
a 在当前光标下一位输入
i 在当前光标下输入
esc 返回命令模式
2. 输入模式下常用的命令
命令 |
作用 |
dd |
删除(剪切)光标所在整行 |
5dd |
删除(剪切)从光标处开始的5行 |
yy |
复制光标所在整行 |
5yy |
复制从光标处开始的5行 |
n |
显示搜索命令定位到的下一个字符串 |
N |
显示搜索命令定位到的上一个字符串 |
u |
撤销上一步的操作 |
p |
将之前删除(dd)或复制(yy)过的数据粘贴到光标后面 |
3.末行模式中可用的命令
命令 |
作用 |
:w |
保存 |
:q |
退出 |
:q! |
强制退出(放弃对文档的修改内容) |
:wq! |
强制保存退出 |
:set nu |
显示行号 |
:set nonu |
不显示行号 |
:命令 |
执行该命令 |
:整数 |
跳转到该行 |
:s/one/two |
将当前光标所在行的第一个one替换成two |
:s/one/two/g |
将当前光标所在行的所有one替换成two |
:%s/one/two/g |
将全文中的所有one替换成two |
?字符串 |
在文本中从下至上搜索该字符串 |
/字符串 |
在文本中从上至下搜索该字符串 |
4.系统中命令
Vim /tec/hostname 修改主机名
最精简的yum仓库配置文件:
[rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突
name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处
baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)
enabled=1:设置此源是否可用;1为可用,0为禁用
gpgcheck=1:设置此源是否校验文件;1为校验,0为不校验
gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址。
Shell脚本
1.两种模式:
交互式(Interactive):用户每输入一条命令就立即执行
批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令
脚本后缀格式 .sh
shell里面的变量可以不加申明
运行原理:将很多命令组合起来自动执行
2.shell脚本的组成三部分:
脚本申明(shell声明为bash解释类型 #!/bin/bash)
脚本注释(shell解释声明 对服务功能的说明解释 #this is a test sw)
脚本命令 (核心的执行命令)
例:
install.sh脚本
#!/bin/bash------声明
#this is a nectcloud install tool -----注释
pwd------命令
ll
reboot
运行:bash install.sh
自动执行pwd ll reboot
ls 加不同参数为什么能返回不一样的东西
原理:传参匹配执行
因为ls能接收参数,并具备判断语句的能力
接收用户参数:
haha.sh
#!/bin/bash
echo “$0” 名称
echo "$#,$*" 个数,列举所有
echo “$1,$3,$5” 第xx值是什么
运行bash haha.sh 跟上 a b c d e f,会根据变量条件显示
判断用户参数:
按照测试对象来划分,条件测试语句可以分为4种:
文件测试语句
整数值比较语句
字符串比较语句
逻辑测试语句
1.文件测试语句
文件测试所用的参数
操作符 |
作用 |
-d |
测试文件是否为目录类型 |
-e |
测试文件是否存在无论目录还是文件 |
-f |
判断是否为一般文件 |
-r |
测试当前用户是否有权限读取 |
-w |
测试当前用户是否有权限写入 |
-x |
测试当前用户是否有权限执行 |
例:
[ -f /etc/fstab ] 判断是否存在该文件
echo $? 判断上一个语句是否执行成功 返回0则成功 1则失败
[ -d /dev ] 判断是否存在该目录
echo $? 判断上一个语句是否执行成功 返回0则成功 1则失败
如何整合两行脚本为一行输出:可用如下参数
逻辑与:&& 如果前面的语句执行成功,则执行后面的语句
逻辑或:|| 如果前面的语句执行失败,则执行后面的语句
例:
判断当前用户是否是root用户,是则执行显示admin,不是则显示user
$USER 代表当前用户的变量
[ $USER = root ] && echo "admin" || echo "user"
逻辑非:! 取反值,是否不等于
[ ! $USER = root ] && "user" || echo "admin"
判断当前用户是否不是root,不等于则显示user,等于就显示admin
2.整数值比较语句
可用的整数比较运算符
操作符 |
作用 |
-eq |
是否等于 |
-ne |
是否不等于 ,不等,为真;相等,为假 |
-gt |
是否大于 , 大于,为真;否则,为假 |
-lt |
是否小于 , 小于,为真;否则,为假 |
-le |
等于或小于 |
-ge |
大于或等于 |
例:
[ 5 -gt 10 ]
echo $?
1
例:
Free-m 查看内存 结合shell与整数判断来实现剩余内存小于xxx报警 ($4为第四列 free- m以m为单位)
例:[`free -m | grep Mem: | awk '{print$4}'` -lt 1024 ] && echo "Mem bu zu" || echo "hen zu"
实现自动发邮件只需要将上述脚本中的echo "Mem bu zu"后面跟上“ -s "系统监控告警" | mail xxx@qq.com (-s 后面为邮件主题)
3.字符串比较语句
shell脚本中,使用变量时要先对变量进行判断是否被定义使用
操作符 |
作用 |
= |
比较字符串内容是否相同 |
!= |
比较字符串内容是否不同 |
-z |
判断字符串内容是否为空值 |
例:
[ -z $123 ]
Echo $?
返回1则已经被定义使用 0为未使用
4.逻辑测试语句
例:
Free-m 查看内存 结合shell与整数判断来实现剩余内存小于xxx报警 ($4为第四列 free- m以m为单位)
例:[`free -m | grep Mem: | awk '{print$4}'` -lt 1024 ] && echo "Mem bu zu" || echo "hen zu"
实现自动发邮件只需要将上述脚本中的echo "Mem bu zu"后面跟上“ -s "系统监控告警" | mail xxx@qq.com (-s 后面为邮件主题)
流程控制语句
流程控制语句会根据真实的工作需求来调整具体的执行命令,根据某些条件实现自动循环执行
当前介绍 if、for、while、case这4种流程控制语句
1.if条件判断语句
if条件测试语句可以让脚本根据实际情况自动执行相应的命令。从技术角度来讲,if语句分为单分支结构、双分支结构、多分支结构;其复杂度随着灵活度一起逐级上升
单分支条件测试语句
if条件语句的单分支结构由if、then、fi关键词组成
如果没有nexus/c9516目录 则去创建
nexus.sh
[root@localhost ~]# more nexus.sh
#!/bin/bash
#cisco nexus 9000 ACI farbic
if [ ! -e /nexus/c9516 ]
then
mkdir -p /nexus/c9516
fi
双分支条件测试语句
if条件语句的双分支结构由if、then、else、fi关键词组成
判断某个主机是否在线
test.sh
#!/bin/bash
#ping test
ping -c 3 -i 0.2 -w 3 $1 &> dev/null 将ping测试的信息重定向输出到黑洞文件保持屏幕清爽
if [ $? -eq 0 ] 判断上一条语句如果返回值为0说明在线
then
echo "$1 is on-line" 输出显示在线
else
echo"$1 not is on-line" 输出显示不在线
fi
1$为接收到的第一个参数
bash test.sh 192.168.1.1
多重分支条件测试语句
if条件语句的多分支结构由if、then、else、elif、fi关键词组成
判断输入的数值是ex还是pass还是fali
read 读取参数 赋值给GRADE
test.sh
#!/bin/bash
#cheng ji test
read -p "Enter : " GRADE
If [ $GRADE -ge 85 ] && [ $GRADE -le 100 ];then
echo "excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ];then
echo "pass"
else
echo "fail"
fi
else 语句 除了条件包含的以外全都是失败 否定
2.for条件循环语句
for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理,当要处理的数据有范围时,使用for循环语句再适合不过了
根据提前创建的txt里的用户名批量创建用户
PASSWD 是一个变量 为了运行脚本的时候输入用户的密码
#!/bin/bash
read -p "Enter is password :" PASSWD
for UNAME in `cat user.txt`
do
id $UNAME $> /dev/null
if [ $? -eq 0 ]
then
echo "Already exitsts"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Crete success"
else
echo "$UNAME, Crete fail"
fi
fi
done
批量判断检测ip.txt中的主机是否在线
#!/bin/bas
for IP in `cat ip.txt`
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ] ; then
echo "Host $IP is On-line."
else
echo "Host $IP is Off-line."
fi
done
来源:oschina
链接:https://my.oschina.net/u/3115396/blog/3170758