Linux就该这么学(Vim编辑器与Shell命令脚本)4章

Vim编辑器与Shell命令脚本(第90页)

Vim中常用的命令【编辑模式】

命令解释
dd删除(剪切)光标所在整行
5dd删除(剪切)从光标处开始的 5 行
yy复制光标所在整行
5yy复制从光标处开始的 5 行 n 显示搜索命令定位到的下一个字符串
N显示搜索命令定位到的上一个字符串
u撤销上一步的操作
p将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
nggn是数字,跳转到第n行

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
?字符串注:不用输(:号);在文本中从下至上搜索该字符串
/字符串注:不用输(:号);在文本中从上至下搜索该字符串

实例:用Vim编辑器修改配置主机名称

[root@localhost workdir]# hostname  #查看当前主机名称
localhost.lws

[root@localhost workdir]# vim /etc/hostname #打开vim编辑器,并如下修改主机名称
localhost.lws2

[root@localhost workdir]# hostname   #再次查看当前主机名称
localhost.lws2

编写简单的脚本(第101页)

[root@localhost lws]# vim example.sh

#!/bin/bash
pwd
ls -al

[root@localhost lws]# bash example.sh  #执行 example.sh脚本
/root/lws
总用量 8
drwxrwxrwx.  2 root root   23 6月  18 15:04 .
dr-xr-x---. 16 root root 4096 6月  18 15:04 ..
-rw-r--r--.  1 root root   22 6月  18 14:58 example.sh

除了上面用 bash 解释器命令直接运行 Shell 脚本文件外,第二种运行脚本程序的方法是
通过输入完整路径的方式来执行。但默认会因为权限不足而提示报错信息,此时只需要为脚
本文件增加执行权限即可

[root@localhost lws]# ./example.sh 
-bash: ./example.sh: 权限不够
[root@localhost lws]# chmod u+x example.sh 
[root@localhost lws]# ./example.sh   #也可以用 sh example.sh
/root/lws
总用量 8
drwxrwxrwx.  2 root root   23 6月  18 15:10 .
dr-xr-x---. 16 root root 4096 6月  18 15:10 ..
-rwxr--r--.  1 root root   23 6月  18 15:10 example.sh

接收用户的参数(第102页)

脚本文件后面输入字符每个空隔就是一个变量,在脚本内用$N(N为数字)调用外面变量作为参数

[root@localhost lws]# vim example.sh  #建立一个脚本文件,内容如下:
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。 "
echo "第1 个参数为$1,第5个参数为$5。"

[root@localhost lws]# sh example.sh a b c d e f g  #执行此脚本
当前脚本名称为example.sh
总共有7个参数,分别是a b c d e f g。 
第1 个参数为a,第5个参数为e。

判断用户的参数(第102页)

文件测试所用的参数

命令解释
-d测试文件是否为目录类型;0为存在,1为不存在
-e测试文件是否存在;0为存在,1为不存在
-f判断是否为一般文件;0为文件,1为目录或其它
-r测试当前用户是否有权限读取;0可读取,1为不可读取
-w测试当前用户是否有权限写入;0为可写入,1为不可写入
-x测试当前用户是否有权限执行;0为执行,1为不可执

用法:格式 [ 空隔 参数 文件或目录 空隔 ]

[root@localhost ~]# [ -d /etc/fstab ]
[root@localhost ~]# echo $?
1

逻辑运算符(102页)

运算符解释
&&当前面的命令执行成功后才会执行它后面的命令
||前面的命令执行失败后才会执行它后面的命令
!把条件测试中的判断结果取相反值

可用的整数比较运算符(第104页)

运算符解释
-eq是否等于
-ne是否不等于
-gt是否大于
-ge是否大于或等于
-lt是否小于
-le是否小于或等于

用法:

[root@localhost ~]# [ 10 -gt 9 ]
[root@localhost ~]# echo $?  # 输出结果为0即是真(TRUE)
0
[root@localhost ~]# [ 10 -gt 11 ]
[root@localhost ~]# echo $?  #输出结果为1即是假(FALST)
1

实例:模拟判断内存不足(第105页)

[root@localhost ~]#  free -m    #查看内存详细
total used free shared buffers cached
Mem: 1826 1244 582 9 1 413
-/+ buffers/cache: 830 996
Swap: 2047 0 2047
[root@localhost ~]#  free -m | grep Mem:  # 过滤只显示 Mem 行
Mem: 1826 1244 582 9
[root@localhost ~]#  free -m | grep Mem: | awk '{print $4}' #保留第4列
582

# 组合命令,赋给变量,注意最外面是反引号(ESC键下面 【`~】)
[root@localhost ~]#  FreeMem=`free -m | grep Mem: | awk '{print $4}'` 
[root@localhost ~]#  echo $FreeMem
582

# 582小于1024 执行成功 && 运行后面的输出
[root@localhost lws]# [ $FreeMem -lt 1024 ] && echo "内存不足"
内存不足

流程控制语句(第106页)

if 条件语句(第106页)

if单分支语句

[root@localhost lws]# vim aa.sh  #用VIM编辑器创建一个脚本文件

#!/bin/bash
DIR="/home/lws/cd"   #将路径赋给变量DIR
if [ ! -e $DIR ]     #!表示没有,-e文件判断,路径变量;如果两边相等即是“没有”和“没有”相等
                     #那么没有文件成立(即结果是0)就执行if下面语句
then
mkdir -p $DIR        #递归创建变量的路径
fi

if双分支语句

[root@localhost lws]# vim chkhost.sh  #创建sh文件

#!/bin/bash
ping -c 3 -i 0.2 -w 3 $1 &> /dev/null 
# 【ping】参数:-c 3 尝试次数为3;-i 0.2 数据包间隔0.2秒;-w 3 超时等待3秒
#  $1:脚本文件后面第一个参数(这里输入IP地址)
#  &> /dev/null 将数据丢到黑洞

if [ $? -eq 0 ]
#如果 $?上一次命令;没有发生错误(也就是 ping 通)即值是0,所以分支输出下面提示语句
then
echo "服务器在线"
else
echo "服务器不在线"
if

[root@localhost lws]# sh chkhost.sh 192.168.1.146 #这里的服务器主机
服务器在线
[root@localhost lws]# sh chkhost.sh 192.168.1.147 #没有此主机
服务器不在线

if多分支语句

[root@localhost lws]# vim chkscore.sh 

#!/bin/bash
read -p "请输入 0~100 的数:" GRADE
#read:是用来读取用户输入信息的命令
# -p :于向用户显示一定的提示信息
#GRADE:等待用户输入的变量

if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then # 用 ; 号可以将两条命令写在同一行
echo "优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "及格"
else
echo "$GRADE 输入错误"

#下面为执行脚本效果
[root@localhost lws]# sh chkscore.sh 
请输入 0~100 的数:90
优秀
[root@localhost lws]# sh chkscore.sh 
请输入 0~100 的数:75
及格
[root@localhost lws]# sh chkscore.sh 
请输入 0~100 的数:10
10 输入错误

for 条件循环语句(第109页)

用 for 循环语句添加用户并设置密码

[root@localhost lws]# vim Example.sh 
#!/bin/bash
read -p "请输入用户密码:" PASSWD  #read -p 读入
for UNAME in `cat users.txt`
#for循环历遍文本文件;
#注:读取文本内容用反单引号,在反引号中的字符串将解释成shell命令来执行

do  #执行循环
id $UNAME &>/dev/null   #id查找用户名,并将信息丢到黑洞
if [ $? -eq 0 ]    #如果查到id号存在即 $?不等于0,就输出"用户已经存在"
then
echo "用户已经存在"

else #如果用户不存就就执行下面代码
useradd $UNAME &> /dev/null  #创建用户
echo "$passwd" | passwd --stdin $UNAME &> /dev/null #给用户设置密码
if [ $? -eq 0 ] #如果设置密码成功 $?值为0,输出创建成功
then
echo "$UNAME,创建成功"
else
echo "$UNAME,创建失败"
fi
fi
done  #结束循环

#执行Example.sh脚本文件
[root@localhost lws]# sh Example.sh 
请输入用户密码:aa888888
andy,创建成功
barry,创建成功
carl,创建成功
duke,创建成功
用户已经存在
用户已经存在

#查看用户配置文件的最后6行查看创建用户信息
[root@localhost lws]# tail -6 /etc/passwd
george:x:1006:1006::/home/george:/bin/bash
eric:x:1010:1010::/home/eric:/bin/bash
andy:x:1011:1011::/home/andy:/bin/bash
barry:x:1012:1012::/home/barry:/bin/bash
carl:x:1013:1013::/home/carl:/bin/bash
duke:x:1014:1014::/home/duke:/bin/bash

用 for 循环语句 检测IP是否在线

#新建一个文本文件加入IP地址
[root@localhost lws]# vim ipadd.txt 
192.168.1.145
192.168.1.146
192.168.1.147

#新建 sh文件
[root@localhost lws]# vim ipon.sh 
#!/bin/bash
for IP in $(cat /home/lws/ipadd.txt)
#之前用返引号引入cat命令,在处用 $引用命令

do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ] #如果没有发生错误 $?的值为0
then
echo "$IP 在线"
else
echo "$IP 不在线"
fi
done

[root@localhost lws]# chmod u+x ipon.sh 
#设置 sh文件为可执行

[root@localhost lws]# sh ipon.sh 
#执行sh文件
192.168.1.145 不在线
192.168.1.146 在线
192.168.1.147 不在线

while 条件循环语句(第111页)

[root@localhost lws]# vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
#注意:这里=号两边不能有空隔,测试时用了空隔总是找不到错误原因
#expr:echo $(expr 1 + 1 ),expr运算符后式子中间要有空隔 1空隔+空隔1

TIMES=0 #定义一个累加变量
echo "商品价格 0~999 之间,猜猜看是多少"

while true #while循环,这个循环只有执行了 exit 0 才会退出循环
do

read -p "输入价格:" INT
let TIMES++
#注:let算术表达式,表达式内变量不用加$(运算符中间不能有空隔)
#例 定义变量AA=1; let AA=1+1;echo $AA 。输出结果是2

if [ $INT -eq $PRICE ]; then
echo "答对了,价格是: $PRICE"
echo "总共答了 $TIMES 次"
exit 0 #猜对了就退出循环

elif [ $INT -gt $PRICE ]; then
echo "高了,再猜" #猜错了 while 循环从头开始 

else
echo "低了,再猜" #猜错了 while 循环从头开始 
fi
done

#执行 sh文件
[root@localhost lws]# sh Guess.sh 
商品价格 0~999 之间,猜猜看是多少
输入价格:500
低了,再猜
输入价格:900
低了,再猜
输入价格:1000
高了,再猜
输入价格:950
高了,再猜
输入价格:930
低了,再猜
输入价格:940
低了,再猜
输入价格:945
低了,再猜
输入价格:946
低了,再猜
输入价格:947
低了,再猜
输入价格:948
答对了,价格是: 948
总共答了 10 次

case 条件测试语句(第112页)

[root@localhost lws]# vim casesh.sh
#!/bin/bash
read -p "请输入字符:" KEY
case "$KEY" in [a-z]|[A-Z]) 
# "$KEY"将变量格式转为字符
# case 格式: case 要检测的变量 in 检测命令,也可以是( $KEY in 值)
echo "您输入的是字母"

;;  [0-9]) # 【;;】必须的格式,即 【 ;; 值)】
echo "您输入的是数字"

;; *) #多少 case分就都可以
echo "您输入的是符号"
esac #返转命令结束 case语句

#执行结果
[root@localhost lws]# sh casesh.sh 
请输入字符:5
您输入的是数字
[root@localhost lws]# sh casesh.sh 
请输入字符:d
您输入的是字母
[root@localhost lws]# sh casesh.sh 
请输入字符:=
您输入的是符号

计划任务服务程序(第113页)

  • at 一次性计划任务

第一种方式

#在指定时间创建目录,计划任务是在后台运行
[root@localhost lws]# at 13:26 #at执行计划任务 后面只须时间
at> mkdir atdir
at> <EOT>  #这里是按键盘组合键(CTRL键+D键)来保存退出
job 9 at Sun Jun 21 13:26:00 2020
[root@localhost lws]# 

查看计划任务列表 at -l

[root@localhost lws]# at -l
10      Sun Jun 21 13:32:00 2020 a root
12      Sun Jun 21 13:33:00 2020 a root

删除计划任务

[root@localhost lws]# at -l
10      Sun Jun 21 13:32:00 2020 a root
12      Sun Jun 21 13:33:00 2020 a root
#这里查到计划任务有两个

[root@localhost lws]# atrm 10 #删除第10序号的任务

[root@localhost lws]# at -l #再次查看,第10序号的任务已经删除
12      Sun Jun 21 13:33:00 2020 a root 
  • crontab 周期性计划任务

格式: 分钟 小时 日 月 星期 命令

【,】表示多个时间段,每个字段都可使用
【-】表示连续,如 (在日字段):1-5 表示1至5号
【/】表示间隔时间,如(在分钟字段):*/2 表示每隔2分钟

参数:

-e 编辑计划任务;-l 查看当前计划任务;
-r 删除某条计划任务;
-u 管理普通用户计划任务 crontab -u 用户名

注意:分钟,小时一定要输入,日月与星期不能同时防止冲突,不输入要用*代替

[root@localhost lws]# crontab -e #执行任务后进入 VIM编辑如下
10 14 21 6 * mkdir /home/lws/cr_dir
#创建一个计划任务,也可以在此配置文件中修改删除

[root@localhost lws]# crontab -l
10 14 21 6 * mkdir /home/lws/cr_dir
#查看计划任务

[root@localhost lws]# crontab -r # 直接删除所有计划任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值