4_ Vim 编辑器与 Shell 命令脚本(RHEL7)

4_ Vim 编辑器与 Shell 命令脚本(RHEL7)–学习笔记

4.1 #Vim 文本编辑器

: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.2 #编写 Shell 脚本

  vim example.sh
  bash example.sh
 ./example.sh  #需要权限

#接收用户的参数

#  $0 对应的是当前 Shell 脚本程序的名称,
#  $# 对应的是总共有几个参数,
#  $* 对应的是所有位置的参数值,
#  $? 对应的是显示上一次命令的执行返回值,
#  $1、$2、$3……则分别对应着第 N 个位置的参数值

#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。 " //#   $#  $*  $? 
echo "第 1 个参数为$1,第 5 个为$5。"
sh example.sh one two three four five six

#判断用户的参数

-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行

[ -d /etc/fstab ]
echo $?    #返回值为 0,则目录存在;如果返回值为非零的值,则意味着目录不存在

[ -e python.txt ]
[ -f /etc/fstab ]
[ -r /etc/fstab ]
[ -w /etc/fstab ]
[ -x /etc/fstab ]

[ -e /dev/cdrom ] && echo "Exist"  # YES && 执行
[ $USER = root ] || echo "user"    # NO || 执行
[ ! $USER = root ] && echo "user" || echo "root"

#可用的整数比较运算符

-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于

[ 10 -eq 10 ]  =
[ 1  -ne 2  ]  /=

[ 2  -gt 1  ]  >
[ 2  -ge 1  ]  >=

[ 1  -lt 2  ]  <
[ 1  -le 2  ]  =<

FreeMem=`free -m | grep Mem: | awk '{print $4}'`
[ $FreeMem -lt 1024 ] && echo "Insufficient Memory"

#常见的字符串比较运算符

#用来判断某个变量是否未被定义(即内容为空值)
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空

[ -z $String ]
[ $LANG != "en.US" ] && echo "Not en.US"

4.3 #流程控制语句bash#if 语句分为单分支结构

if 条件测试操作

then 命令序列
fi

#判断/media/cdrom 文件是否存在,若存在就结束条件判
#断和整个 Shell 脚本,反之则去创建这个目录

#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi

#if 双分支结构

if 条件测试操作
then 命令序列1
else 命令序列2
fi

#验证某台主机是否在线,然后根据返回值的结果,要么
#显示主机在线信息,要么显示主机不在线信息

#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &>> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi

#if 多分支结构

if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi

#使用多分支的 if 条件语句来判断用户输入的分数在哪个成绩区间内,然后输出如
#Excellent、 Pass、 Fail 等提示信息

#!/bin/bash
read -p "Enter your score (0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ;  # 85=<X<=100
then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ;  ## 70=<X<=84
then
echo "GRADE is Pass"
else
echo "$GEADE is Fail"
fi

#for 条件循环语句
for 变量名 in 取值列表
do
命令序列
done

#在脚本中使用 read 命令读取用户输入的密码值,然
#后赋值给 PASSWD 变量,并通过-p 参数向用户显示一段提示信息,告诉用户正在输入的内容
#即将作为账户密码。在执行该脚本后,会自动使用从列表文件 users.txt 中获取到所有的用户
#名称,然后逐一使用“id 用户名”命令查看用户的信息,并使用$?判断这条命令是否执行成
#功,也就是判断该用户是否已经存在。

#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for  UNAME in 'cat users.txt'
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
 then
 echo "Already exists"
 else
 useradd $UNAME &> /dev/null
 echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
        if [ $? -eq 0 ]
        then
        echo "$UNAME, Create success"
        else
        echo "$UNAME, Create failure"
        fi
  fi
done

#!/bin/bash
HLIST=$(cat ~/ipadds.txt)  #执行括号或双引号括起来的字符串中的命令
for IP in $HLIST           #类似于转义字符中反引号`命令`的 Shell 操作符
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

#while 条件循环语句

while 条件测试操作
do
命令序列
done

#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES = 0
echo "Price is between 0-999 ,Guess what?"
while true    #while 条件循环语句中的条件测试始终为 true,
              #因此判断语句会无限执行下去,直到用户输入的数
              #值等于 expr 命令取得的数值后,
              #这两者相等之后才运行 exit 0 命令,终止脚本的执行
do
read -p "Please Enter the price" INT
let TIMES++
if [ $INT -eq $PRICE ] ;
then
echo "YES ,Price is $PRICE"
echo "$TIMES"
exit 0
elif [ $INT -gt $PRICE ] ;
then
echo "High"
else
echo "Low"
fi
done


bash Guess.sh

4.4 #计划任务服务程序

#一次性计划任务:
at 23:30
at > systemctl restart httpd
at > 此处请同时按下 Ctrl + D 组合键来结束编写计划任务

echo “systemctl restart httpd” | at 23:30

at -l #查看已设置好但还未执行的一次性计划任务
atrm 任务序号 #将其删除

#长期性计划任务

crontab -e    # 来创建计划任务,打开vim编辑器
crontab -l    # 查看当前计划任务的命令
crontab -r    # 删除某条计划任务
crontab -u    # -u 参数来编辑他人的计划任务
whereis rm    # rm 命令路径
而“日”和“星期”字段不能同时使用
25  3  *  *  1,3,5 /usr/bin/tar -czvf backup.tar.gz  /home/wwwroot
分  时 日 月  星期  命令绝对路径       目标名称       被打包文件夹
25  3  *  *  1,3,5 /usr/bin/tar -czvf backup.tar.gz  /home/wwwroot
0   1  *  *  1-5   /usr/bin/rm  -rf   /tmp/*
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值