Linux就该这么学 20181003(第四章Vim/shell/测试条件)

参考链接https://www.linuxprobe.com/ 

vim文本编辑器
命令模式:控制光标移动,可对文本进行复制,黏贴,删除和查找工作
输入模式:正常的文本录入
末行模式:保存或退出文档,以及设置编辑环境

命令模式常用的一些命令
dd    删除(剪切)光标所在整行
5dd    删除(剪切)从光标处开始的5行
yy    复制光标所在整行
5yy    复制从光标处开始的5行
n    显示搜索命令定位到的下一个字符串
N    显示搜索命令定位到的上一个字符串
u    撤销上一步的操作
p    将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
ggdG    删除全部

魔航模式
命令    作用
: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
?字符串    在文本中从下至上搜索该字符串    
/字符串    在文本中从上至下搜索该字符串
ps: :%s/one/two/g 将全文的所有one替换成two


使用a、i、o三个键从命令模式切换到输入模式。其中,a键与i键分别是在光标后面一位和光标当前位置切换到输入模式,而o键则是在光

标的下面再创建一个空行


修改主机名
vim /etc/hostname
#linuxprobe.com  PS:重启后才生效 hostname

配置网卡信息
在RHEL5,6网卡配置文件都是以eth开头,第一块eth0,第二块eth1
但是在RHEL7中 ,网卡配置文件以ifcfg开始 如ifcfg-eno16777736
现在有一个名为ifcfg-eno16777736网卡设备,将其配置为开机自启动,并设置IP
cd /etc/sysconfig/network-scripts目录中
vim编辑器修改网卡文件 ,写入后保存
设备类型:TYPE=Ethernet

地址分配模式:BOOTPROTO=static

网卡名称:NAME=eno16777736

是否启动:ONBOOT=yes

IP地址:IPADDR=192.168.10.10

子网掩码:NETMASK=255.255.255.0

网关地址:GATEWAY=192.168.10.1

DNS地址:DNS1=192.168.10.1

##
[root@linuxprobe ~]# cd /etc/sysconfig/network-scripts/
[root@linuxprobe network-scripts]# vim ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.10.10
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=192.168.10.1

systemctl restart network

配置yum仓库
第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。

第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并

保存退出(不要写后面的中文注释)。

[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:若上面参数开启校验,那么请指定公钥文件地址。

第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。

第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用。

进入/etc/yum.repos.d目录中后创建Yum配置文件:

[root@linuxprobe ~]# cd /etc/yum.repos.d/
[root@linuxprobe yum.repos.d]# vim rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0

创建挂载点后进行挂载操作,并设置成开机自动挂载(详见第6章)。尝试使用Yum软件仓库来安装Web服务,出现Complete!则代表配置正

确:

[root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom
[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
mount: /dev/sr0 is write-protected, mounting read-only
[root@linuxprobe yum.repos.d]# vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults 0 0
[root@linuxprobe ~]# yum install httpd
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分输出信息………………
Dependencies Resolved
================================================================================
 Package Arch Version Repository Size
================================================================================
Installing:
 httpd x86_64 2.4.6-17.el7 rhel 1.2 M
Installing for dependencies:
 apr x86_64 1.4.8-3.el7 rhel 103 k
 apr-util x86_64 1.5.2-6.el7 rhel 92 k
 httpd-tools x86_64 2.4.6-17.el7 rhel 77 k
 mailcap noarch 2.1.41-2.el7 rhel 31 k
Transaction Summary
================================================================================
Install 1 Package (+4 Dependent packages)
Total download size: 1.5 M
Installed size: 4.3 M
Is this ok [y/d/N]: y
Downloading packages:
--------------------------------------------------------------------------------
………………省略部分输出信息………………
Complete!

#参数
[root@linuxprobe ~]# ./example.sh
bash: ./Example.sh: Permission denied
[root@linuxprobe ~]# chmod u+x example.sh

$# 表示有多个参数
$* 表示参数分别是
$1 - $9 - ${10} 表示传的参数

测试语句格式:  [ 条件表达式 ]
文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,
-d    测试文件是否为目录类型
-f    判断是否为一般文件
-e    测试文件是否存在
-r    测试当前用户是否有权限读取
-w    测试当前是否有写入权限
-x    测试当前用户执行权限

[ -d /root/tmp ] 
echo $? #如果为真 0    假为1

与    &&||!
等于    ==

[ $USER != root ] 
echo $?



整数比较运算符仅对数字进行操作
-eq    是否等于
-ne    是否不等于
-gt    大于
-lt    小于
-le    小于或等于
-ge    大于或等于

[root@linuxprobe ~]# free -m
            total     used     free     shared     buffers     cached
Mem:        1826      1244     582      9          1           413
-/+ buffers/cache:    830 996
Swap:       2047      0        2047
[root@linuxprobe ~]# free -m | grep Mem:
Mem:        1826      1244     582      9 
[root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}'
582
[root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
[root@linuxprobe ~]# echo $FreeMem 
[ $FreeMem -lt 1024 ] && echo "Insufficient Memory"

字符串比较用于判断测试字符串是否为空值
=    比较字符串内容是否相同
!=    字符串内容不等于
-z    判断字符串内容是否为空

[ -z $String ]

流程控制语句 if for while case

下面使用单分支的if条件语句来判断/media/cdrom文件是否存在,若存在就结束条件判断和整个Shell脚本,反之则去创建这个目录:

[root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi

if
    then
    else
fi


if 条件测试    
    then 命令1
elif 条件测试
    then 命令2
fi


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

for 用户名 in 列表文件
do    
    创建用户并设置密码
done
[root@linuxprobe ~]# vim Example.sh
#!/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

主机在线测试
[root@linuxprobe ~]# vim CheckHosts.sh
#!/bin/bash
HLIST=$(cat ~/ipadds.txt)
for IP in $HLIST
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
[root@linuxprobe ~]# ./CheckHosts.sh
Host 192.168.10.10 is On-line.
Host 192.168.10.11 is Off-line.
Host 192.168.10.12 is Off-line.


while条件循环语句
while    条件测试操作
do
    命令序列
done

case条件测试语句
case 变量值 in
模式1)
    命令1
    ;;
模式2)
    命令2
    ;;
*)
    默认命令序列
esac

read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac

计划任务服务程序
定时任务只执行一次 用at
#at -l 查看定时任务列表
#atrm 任务号 删除
[root@linuxprobe ~]# at 23:30
at > systemctl restart httpd
at > 此处请同时按下Ctrl+d来结束编写计划任务
job 3 at Mon Apr 27 23:30:00 2015


crontab
分    时    日    月    星期命令
#crontab -e 编辑
#crontab -l 罗列
字段    说明
分钟    取值为0~59的整数
小时    取值为0~23的任意整数
日期    取值为1~31的任意整数
月份    取值为1~12的任意整数
星期    取值为0~7的任意整数,其中0与7均为星期日
命令    要执行的命令或程序脚本

#假设在每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot

计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突

1.Vim编辑模式三种分别是命令模式、末行模式、输入模式
2. $0表示脚本文件名
3.if then elif then else fi
4.for 变量名 in 取值列表 do .. done
5.根据用户输入的不同最好执行case条件语句
6.唱起计划任务使用的服务是 crontab -e 分 时 日 月 星期

 

vim文本编辑器命令模式:控制光标移动,可对文本进行复制,黏贴,删除和查找工作输入模式:正常的文本录入末行模式:保存或退出文档,以及设置编辑环境
命令模式常用的一些命令dd删除(剪切)光标所在整行5dd删除(剪切)从光标处开始的5行yy复制光标所在整行5yy复制从光标处开始的5行n显示搜索命令定位到的下一个字符串N显示搜索命令定位到的上一个字符串u撤销上一步的操作p将之前删除(dd)或复制(yy)过的数据粘贴到光标后面ggdG删除全部
魔航模式命令作用: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?字符串在文本中从下至上搜索该字符串    /字符串在文本中从上至下搜索该字符串ps: :%s/one/two/g 将全文的所有one替换成two

使用a、i、o三个键从命令模式切换到输入模式。其中,a键与i键分别是在光标后面一位和光标当前位置切换到输入模式,而o键则是在光
标的下面再创建一个空行

修改主机名vim /etc/hostname#linuxprobe.com  PS:重启后才生效 hostname
配置网卡信息在RHEL5,6网卡配置文件都是以eth开头,第一块eth0,第二块eth1但是在RHEL7中 ,网卡配置文件以ifcfg开始 如ifcfg-eno16777736现在有一个名为ifcfg-eno16777736网卡设备,将其配置为开机自启动,并设置IPcd /etc/sysconfig/network-scripts目录中vim编辑器修改网卡文件 ,写入后保存设备类型:TYPE=Ethernet
地址分配模式:BOOTPROTO=static
网卡名称:NAME=eno16777736
是否启动:ONBOOT=yes
IP地址:IPADDR=192.168.10.10
子网掩码:NETMASK=255.255.255.0
网关地址:GATEWAY=192.168.10.1
DNS地址:DNS1=192.168.10.1
##[root@linuxprobe ~]# cd /etc/sysconfig/network-scripts/[root@linuxprobe network-scripts]# vim ifcfg-eno16777736TYPE=EthernetBOOTPROTO=staticNAME=eno16777736ONBOOT=yesIPADDR=192.168.10.10NETMASK=255.255.255.0GATEWAY=192.168.10.1DNS1=192.168.10.1
systemctl restart network
配置yum仓库第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。
第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并
保存退出(不要写后面的中文注释)。
[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:若上面参数开启校验,那么请指定公钥文件地址。
第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。
第4步:使用“yum install httpd -y”命令检查Yum软件仓库是否已经可用。
进入/etc/yum.repos.d目录中后创建Yum配置文件:
[root@linuxprobe ~]# cd /etc/yum.repos.d/[root@linuxprobe yum.repos.d]# vim rhel7.repo[rhel7]name=rhel7baseurl=file:///media/cdromenabled=1gpgcheck=0
创建挂载点后进行挂载操作,并设置成开机自动挂载(详见第6章)。尝试使用Yum软件仓库来安装Web服务,出现Complete!则代表配置正
确:
[root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrommount: /dev/sr0 is write-protected, mounting read-only[root@linuxprobe yum.repos.d]# vim /etc/fstab/dev/cdrom /media/cdrom iso9660 defaults 0 0[root@linuxprobe ~]# yum install httpdLoaded plugins: langpacks, product-id, subscription-manager………………省略部分输出信息………………Dependencies Resolved================================================================================ Package Arch Version Repository Size================================================================================Installing: httpd x86_64 2.4.6-17.el7 rhel 1.2 MInstalling for dependencies: apr x86_64 1.4.8-3.el7 rhel 103 k apr-util x86_64 1.5.2-6.el7 rhel 92 k httpd-tools x86_64 2.4.6-17.el7 rhel 77 k mailcap noarch 2.1.41-2.el7 rhel 31 kTransaction Summary================================================================================Install 1 Package (+4 Dependent packages)Total download size: 1.5 MInstalled size: 4.3 MIs this ok [y/d/N]: yDownloading packages:--------------------------------------------------------------------------------………………省略部分输出信息………………Complete!
#参数[root@linuxprobe ~]# ./example.shbash: ./Example.sh: Permission denied[root@linuxprobe ~]# chmod u+x example.sh
$# 表示有多个参数$* 表示参数分别是$1 - $9 - ${10} 表示传的参数
测试语句格式:  [ 条件表达式 ]文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,-d测试文件是否为目录类型-f判断是否为一般文件-e测试文件是否存在-r测试当前用户是否有权限读取-w测试当前是否有写入权限-x测试当前用户执行权限
[ -d /root/tmp ] echo $? #如果为真 0    假为1
与&&或||非!等于==
[ $USER != root ] echo $?


整数比较运算符仅对数字进行操作-eq是否等于-ne是否不等于-gt大于-lt小于-le小于或等于-ge大于或等于
[root@linuxprobe ~]# free -m            total     used     free     shared     buffers     cachedMem:        1826      1244     582      9          1           413-/+ buffers/cache:    830 996Swap:       2047      0        2047[root@linuxprobe ~]# free -m | grep Mem:Mem:        1826      1244     582      9 [root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}'582[root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`[root@linuxprobe ~]# echo $FreeMem [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
字符串比较用于判断测试字符串是否为空值=比较字符串内容是否相同!=字符串内容不等于-z判断字符串内容是否为空
[ -z $String ]
流程控制语句 if for while case
下面使用单分支的if条件语句来判断/media/cdrom文件是否存在,若存在就结束条件判断和整个Shell脚本,反之则去创建这个目录:
[root@linuxprobe ~]# vim mkcdrom.sh#!/bin/bashDIR="/media/cdrom"if [ ! -e $DIR ]thenmkdir -p $DIRfi
ifthenelsefi

if 条件测试then 命令1elif 条件测试then 命令2fi

for循环条件语句for 变量名 in 取值列表do命令序列done
for 用户名 in 列表文件do创建用户并设置密码done[root@linuxprobe ~]# vim Example.sh#!/bin/bashread -p "Enter The Users Password : " PASSWDfor UNAME in `cat users.txt`doid $UNAME &> /dev/nullif [ $? -eq 0 ]thenecho "Already exists"elseuseradd $UNAME &> /dev/nullecho "$PASSWD" | passwd --stdin $UNAME &> /dev/nullif [ $? -eq 0 ]thenecho "$UNAME , Create success"elseecho "$UNAME , Create failure"fifidone
主机在线测试[root@linuxprobe ~]# vim CheckHosts.sh#!/bin/bashHLIST=$(cat ~/ipadds.txt)for IP in $HLISTdoping -c 3 -i 0.2 -W 3 $IP &> /dev/nullif [ $? -eq 0 ] ; thenecho "Host $IP is On-line."elseecho "Host $IP is Off-line."fidone[root@linuxprobe ~]# ./CheckHosts.shHost 192.168.10.10 is On-line.Host 192.168.10.11 is Off-line.Host 192.168.10.12 is Off-line.

while条件循环语句while条件测试操作do命令序列done
case条件测试语句case 变量值 in模式1)命令1;;模式2)命令2;;*)默认命令序列esac
read -p "请输入一个字符,并按Enter键确认:" KEYcase "$KEY" in[a-z]|[A-Z])echo "您输入的是 字母。";;[0-9])echo "您输入的是 数字。";;*)echo "您输入的是 空格、功能键或其他控制字符。"esac
计划任务服务程序定时任务只执行一次 用at#at -l 查看定时任务列表#atrm 任务号 删除[root@linuxprobe ~]# at 23:30at > systemctl restart httpdat > 此处请同时按下Ctrl+d来结束编写计划任务job 3 at Mon Apr 27 23:30:00 2015

crontab分时日月星期命令#crontab -e 编辑#crontab -l 罗列字段说明分钟取值为0~59的整数小时取值为0~23的任意整数日期取值为1~31的任意整数月份取值为1~12的任意整数星期取值为0~7的任意整数,其中0与7均为星期日命令要执行的命令或程序脚本
#假设在每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突
1.Vim编辑模式三种分别是命令模式、末行模式、输入模式2. $0表示脚本文件名3.if then elif then else fi4.for 变量名 in 取值列表 do .. done5.根据用户输入的不同最好执行case条件语句6.唱起计划任务使用的服务是 crontab -e 分 时 日 月 星期

 

posted @ 2018-10-03 23:56  想翻身的猫  阅读(671)  评论(0编辑  收藏  举报