vi/vim编辑器vim编辑器有颜色,vi编辑器没有默认打开:命令模式编辑模式: i,a,o末行模式:命令作用: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?字符串在文本中从下至上搜索该字符串/字符串在文本中从上至下搜索该字符串使用vim配置网卡信息进入到网卡配置文件所在的目录,然后编辑网卡配置文件,在其中填入下面的信息:[root@linuxprobe ~]# cd /etc/sysconfig/network-scripts/ [root@linuxprobe network-scripts]# vim ifcfg-ens160 TYPE=Ethernet BOOTPROTO=static NAME=ens160 ONBOOT=yes IPADDR=192.168.10.10 NETMASK=255.255.255.0 GATEWAY=192.168.10.1 DNS1=192.168.10.1执行重启网卡设备的命令,然后通过ping命令测试网络能否连通。systemctl restart network nmcli connection reload ens160 ping 192.168.10.10Shell命令脚本1、 交互式(Interactive):用户每输入一条命令就立即执行。2、批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。脚本声明 #!/bin/bash脚本注释 #txykoke.cn编写脚本命令 ls pwd #!/bin/bash #txykoke.cn编写 echo "$0" 脚本名称 echo "$#" 总共接受了几个参数 echo "$*"参数分别是什么 echo "$1,$2,$5" 接收到第1个第3个第5个的参数 [root@txykoke koke]# bash haha.sh a b c d e f haha.sh 6 a b c d e f a,b,e [root@txykoke koke]# 测试语句格式:[ 条件表达式 ] (两边均有一个空格)文件测试所用的参数操作符作用-d测试文件是否为目录类型-e测试文件是否存在-f判断是否为一般文件-r测试当前用户是否有权限读取-w测试当前用户是否有权限写入-x测试当前用户是否有权限执行判断是否是目录#如果返回值为0,则目录存在;如果返回值为非零的值,则意味着它不是目录,或这个目录不存在 [ -d /etc/koke ] echo $?#判断/dev/cdrom文件是否存在,若存在则输出Exist字样。 [ -e /dev/cdrom ] && echo "Exist"#判断用户是否不是管理员账户,不是管理员账号账户则输出root [ ! $USER = root ] || echo "root"#先判断当前用户是否root,然后!取反,如果当前不是root用户,则输出user,反之输出root [ ! $USER = root ] && echo "user" || echo "root"Tips&&是逻辑“与”,只有当前面的语句执行成功的时候才会执行后面的语句。||是逻辑“或”,只有当前面的语句执行失败的时候才会执行后面的语句。!是逻辑“非”,代表对逻辑测试结果取反值;之前若为正确则变成错误,若为错误则变成正确。整数比较运算符操作符作用-eq是否等于-ne是否不等于-gt是否大于-lt是否小于-le是否等于或小于-ge是否大于或等于#创建一个变量num 如果10大于num成立 则输出0 num=100; [ 10 -gt $num ] echo $?#判断当前服务器内存,并设置警告值 FreeMem=`free -m |grep Mem: |awk '{print$4}'` [ $FreeMem -lt 300 ] && echo "内存告急:小于300m,请检查/升级配置"|| echo "内存余量正常" 常见的字符串比较运算符操作符作用=比较字符串内容是否相同!=比较字符串内容是否不同-z判断字符串内容是否为空#接下来通过判断FreeMem变量是否为空值,进而判断是否定义了这个变量: [ -z $FreeMem ] echo $? [ -z $LANG ] echo $?流程控制语句if条件测试语句#!/bin/bash #测试主机是否在线 read -p "请输入您的ip地址:" ip ping -c 3 -i 0.2 -W 3 $ip &> /dev/null if [ `echo $?` -eq 0 ];then echo "地址 $ip 是在线的" else echo "地址 $ip 是不在线的" fi#创建成绩表 a.txt 张三 40 李四 89 koke 60 亚男 59#!/bin/bash #判断学生学习成绩1 read -p "Enter your score(0-100):" GRADE if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then echo "$GRADE is Excellent" elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then echo "$GRADE is Pass" else echo "$GRADE is Fail" fifor条件循环语句#!/bin/bash #判断学生学习成绩2 read -p "请输入您的姓名:" Result echo "请稍等,正在查询您的成绩" sleep 1 #备份旧的IFS变量 OLDIFS="IFS" #修改分隔符为换行符 IFS=$'\n' #文件行数 n=`wc -l a.txt|awk '{print$1}'` #循环次数 s=0 for name in `cat a.txt` do s=`expr $s + 1` if [ `echo $name |awk '{print$1}'` = `echo $Result` ] then echo "您的成绩是:"`echo $name |awk '{print$2}'`"分" #记录分数到num num=`echo $name |awk '{print$2}'` sleep 1 if [ $num -ge 85 ]&& [ $num -le 100 ];then echo "您的评级:优秀" break elif [ $num -ge 70 ] && [ $num -le 84 ];then echo "您的评级:良好" break elif [ $num -ge 60 ] && [ $num -le 69 ];then echo "您的评级:合格" break elif [ $num -lt 60 ] && [ $num -ge 0 ];then echo "您的评级:不合格" break else echo "查询到成绩不合法" break fi elif [ $s -eq $n ]&&[ `echo $name |awk '{print$1}'` != `echo $Result` ];then echo "未匹配到您输入的姓名,请检查" fi done #还原IFS变量 IFS="$OLDIFS"#创建用户名表 vim users.txt andy barry carl duke eric george#!/bin/bash #批量创建用户 read -p "请输入你的密码:" PASSWD for UNAME in `cat user.txt` do id $UNAME $> /dev/null if [ $? -eq 0 ];then echo "$UNAME ,用户已经存在" else useradd $UNAME echo "$PASSWD"|PASSWD ==stdin $UNAME &>/dev/null echo "$UNAME,用户创建成功" fi done#!/bin/bash #批量检测IP地址是否在线 #创建ip地址文件:ipaddr.txt Host=`cat ipaddr.txt` touch online.txt &> /dev/null for IP in $Host do ping -c 1 $IP &> /dev/null if [ $? -eq 0 ];then echo $IP >> online.txt else echo "$IP 不在线" fi done echo "在线IP:" cat online.txt自己做的一个小脚本#!/bin/bash #经过一些if语句和for循环查询学习,做了这个将疑似DDOS攻击的ip地址加入黑名单, #只需要简单设置自己服务器IP以及IP的访问量,就可以一键运行并自动拉黑。 # 判断是否安装了nload if ! type nload >/dev/null 2>&1 then echo "nload 未安装" yum install nload -y echo "nload 已经安装完成" else echo 'nload 已安装' fi #判断文件是否存在 file="file.txt" if [ ! -e $file ] then echo "文件不存在" touch file.txt sleep 2 echo "文件已创建" else echo "文件已经存在" fi #备份旧的IFS变量 OLDIFS="IFS" #修改分隔符为换行符 IFS=$'\n' touch blacklist.txt >> /dev/null touch black.txt >> /dev/null #将ip信息存入file.txt netstat -ntu|awk '{print $5}'|cut -d: -f1 -s|sort|uniq -c|sort -nk1 -r|sed 's/[\t ]\+/ /g' |sed '/81.68.172.160/'d |sed '/127.0.0.1/'d>file.txt #遍历文件ip for ip in `cat file.txt` do #将取出的ip占有量 临时存放给变量num num=`echo $ip | awk '{print $1}'` #如果ip占有量超过20 if [ $num -gt 20 ] then #则将ip进行显示 echo $ip | awk '{print $2}' #将ip加入黑名单 blacklist=`echo $ip | awk '{print $2}' ` iptables -I INPUT -s $blacklist -j DROP echo $blacklist >> blacklist.txt echo $blacklist >> black.txt fi done #cat blacklist.txt|sed -e '/^$/d' > blacklist.txt #cat black.txt|sed -e '/^$/d' > black.txt if [ -s blacklist.txt ];then echo "黑名单列表:" cat blacklist.txt echo "可疑ip已加入黑名单" echo "本脚本加入的黑名单可查看black.txt文件" else echo "机器目前状态良好" fi rm -rf blacklist.txt IFS="$OLDIFS" #还原IFS变量#!/bin/bash #判断用户,并且批量创建 read -p "请输入您要设置的用户名的密码:" PASSWD for UNAME in `cat user.txt` do id $UNAME &> /dec/null if [ $? -eq 0 ];then echo "用户$UNAME已经存在" else useradd $UNAME &> /dev/null echo "$PASSWD"|passwd --stdin $UNAME &> /dev/null fi done#!/bin/bash #遍历局域网ip,并测试是否在线 str="10.10.1." for ip in {200..220} do ping -c1 -w1 $str$ip &> /dev/null if [ $? -eq 0 ];then echo "$str$ip 是在线的" fi donewhile条件循环语句#!/bin/bash #while 语句编写猜数字 #取100以内的随机数 RDOM=$(expr $RANDOM % 1000) #猜的数字的次数 sum=0 echo "------猜数字小游戏------" while true do read -p "请输入一个1000以内的数字:" NUM let TIMES++ expr $NUM + 1 &> /dev/null if [ $? != 0 ];then echo "输入有误,请重新输入" elif [ $NUM -gt 1000 ];then echo "请输入小等于1000的数字。" elif [ $NUM -lt 0 ];then echo "请输入大于等于0的数字。" elif [ $NUM -eq $RDOM ];then echo "恭喜你,猜对了!!" echo "你一共猜了 $TIMES次" exit 0 elif [ $NUM -gt $RDOM ];then echo "你猜大了!!" elif [ $NUM -lt $RDOM ];then echo "你猜小了!!" else "您的输入有误!!" fi donecase条件测试语句#!/bin/bash #case语句,判断 read -p "Enter:" KEY case "$KEY" in [a-z]|[A-Z]) echo "字母" ;; [0-9]) echo "数字" ;; *) echo "错误" ;; esac计划任务服务程序一次性的计划任务:atat 时间 > reboot保存:Ctrl+D查看当前已有哪些计划任务 :at -l查看命令:at -c 编码删除计划任务:atrm 编码 或者 at -rat命令的参数及其作用参数作用-f指定包含命令的任务文件-q指定新任务名称-l显示待执行任务列表-d删除指定待执行任务-m任务执行后给用户发邮件#让at命令接收前面echo命令的输出信息 echo "systemctl restart httpd" | at 23:30一般我们会使用“at now +2 MINUTE”的方式进行操作,这表示2分钟(MINUTE)后执行这个任务,也可以将其替代成小时(HOUR)、日(DAY)、月(MONTH)等词汇:at now +2 MINUTE at> systemctl restart httpd Ctrl+D周期性的计划任务:crondcrond 服务名称crontab 配置工具分 时 日 月 星期 命令 crontab命令的参数及其作用参数作用-e编辑计划任务-u指定用户名称-l列出任务列表-r删除计划任务 使用crond设置任务的参数字段说明字段说明分钟取值为0~59的整数小时取值为0~23的任意整数日期取值为1~31的任意整数月份取值为1~12的任意整数星期取值为0~7的任意整数,其中0与7均为星期日命令要执行的命令或程序脚本crontab -e #分 时 日 月 星期 命令 #每周日的0:30分重启 30 0 * * 7 /usr/sbin/reboot #每隔两小时重启 * */2 * * * /usr/sbin/reboot #每月的3-5号的2:30分重启 30 2 3-5 * * /usr/sbin/reboot #每月的3号5号7号的2:30分重启 30 2 3,5,7 * * /usr/sbin/reboot