Linux巩固篇004-Linux Shell 命令脚本

简介: 纸上得来终觉浅,绝知此事要躬行

前言

身为一个三年的运维工程师,从开发转测开再转运维,都是不断学习的过程,未必开发才是最优秀的,找到适合自己的职业不断深耕,你也会在自己的行业大放光彩,本系列依照《Linux就该这么学》系列随书学习练习操作,将一些课本上不顺畅的地方,全部以最简方式免费开源展示给大家,资源大家可以自行百度,也希望大家多关注刘遄老师的第二版关于centos8的丛书,学习最前沿的Linux相关技术。

常用命令汇总

Vim 文本编辑器

三种模式不再介绍了,用过Linux的都应该掌握了,这里带一下,命令模式、末行模式和编辑模式,切换关系图如下

image.png

Vim 常用命令

image.png

末行模式可用命令

image.png

image.png

配置主机名称

[root@linux ~]# vim /etc/hostname

linux

[root@linux ~]# hostname

linux

配置网卡信息

[root@linux ~]# cd /etc/sysconfig/network-scripts

查看目录下的网卡配置文件

image.png

静态如下:

image.png

image.png

设备类型: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

动态如下:

image.png

[root@linux ~]# systemctl restart network

配置Yum 软件仓库

修改配置文件

[root@linux ~]# cd /etc/yum.repos.d/

[root@linux yum.repos.d]# vim rhel7.repo

[rhel7]

name=rhel7

baseurl=file:///media/cdrom

enabled=1

gpgcheck=0

创建挂载点

[root@linux yum.repos.d]# mkdir -p /media/cdrom

[root@linux yum.repos.d]# mount /dev/cdrom /media/cdrom

mount: /dev/sr0 is write-protected, mounting read-only

[root@linux yum.repos.d]# vim /etc/fstab

/dev/cdrom /media/cdrom iso9660 defaults 0 0

安装Web 服务测试

[root@linux ~]# yum install httpd

......

Complete!

编写Shell 脚本

单程脚本测试

[root@linux ~]# vim test.sh

#!/bin/bash

#For test BY linux

pwd

ls -al

[root@linux ~]# bash test.sh

也可以用./执行脚本,若权限不够可以通过chmod +x example.sh 加权

交互脚本测试

[root@linux ~]# vim example.sh

#!/bin/bash

echo "当前脚本名称为$0"

echo "总共有#个参数,分别是#个参数,分别是#个参数,分别是*。"

echo "第1 个参数为1,第5个为1,第5 个为5。"

[root@linux ~]# sh example.sh one two three four five six

image.png

条件测试语句

image.png

文件测试参数

image.png

[root@linux ~]# [ -d /etc/fstab ]

[root@linux ~]# echo $?

返回值为0,则目录存在;返回值为非零的值,则目录不存在,我们升级成一个语句

[root@linux ~]# [ -e /etc/fstab ] && echo "存在"

逻辑关系对应

|| 表示当前面的命令执行失败后才会执行它后面的命令

&& 表示不管当前面的命令执行结果如何,后边的命令必定会执行

!它表示把条件测试中的判断结果取相反值

[root@linux ~]# [ ! $USER = root ] && echo "user" || echo "root"

运算关系对应

image.png

示例

[root@linux ~]# free -m

total used free shared buffers cached

Mem: 1826 1244 582 9 1 413

-/+ buffers/cache: 830 996

Swap: 2047 0 2047

[root@linux ~]# free -m | grep Mem:

Mem: 1826 1244 582 9

[root@linux ~]# free -m | grep Mem: | awk '{print $4}'

582

[root@linux ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`

[root@linux ~]# echo $FreeMem

582

使用整数运算符来判断内存可用量的值是否小于1024,若小于则会提示“Insufficient Memory”(内存不足)的字样

[root@linux ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"

Insufficient Memory

比较关系对应

image.png

[root@linux ~]# [ -z $String]

[root@linux ~]# echo $?

0

[root@linux ~]# echo $LANG

en_US.UTF-8

[root@linux ~]# [ $LANG != "en.US" ] && echo "Not en.US"

Not en.US

流程控制语句

if语句


image.png

--单分支--

[root@localhost ~]# cat iftest.sh  

#! /bin/bash

DIR="/test/iftest"

if [ ! -e $DIR ]

then

mkdir -p $DIR

fi

[root@localhost ~]# ls -d /test/iftest/

/test/iftest/

image.png

--双分支--

[root@localhost ~]# cat ifdoubletest.sh  

#! /bin/bash

# 通过-c 参数来规定尝试的次数

# 通过-i 参数定义每个数据包的发送间隔

# 通过-W 参数定义等待超时时间

# 通过&> /dev/null 指向为空值

ping -c 3 -i 0.2 -w 3 $1 &> /dev/null

if [ $? -eq 0 ]

then

echo "网络联通"

else

echo "网络不通"

fi

[root@localhost ~]# bash ifdoubletest.sh 192.168.1.1

网络不通

[root@localhost ~]# bash ifdoubletest.sh 10.6.6.97

网络联通


image.png

--多分支--

[root@localhost ~]# cat ifmuilttest.sh  

#! /bin/bash

# 通过read -p设置可输入模式

read -p "请输入分数(0-100):" score

if [ score -ge 85 ] && [score -ge 85 ] && [score -ge 85 ] && [ score -le 100 ];then

echo "成绩优秀"

elif [ score -ge 70 ] && [score -ge 70 ] && [score -ge 70 ] && [ score -le 84 ];then

echo "成绩良好"

elif [ score -ge 60 ] && [score -ge 60 ] && [score -ge 60 ] && [ score -le 69 ];then

echo "成绩可以"

elif [ score -ge 0 ] && [score -ge 0 ] && [score -ge 0 ] && [ score -le 59 ];then

echo "成绩差劲"

else

echo "输入有误,请重新输入"

fi

image.png

for语句

image.png


--for循环--

用户批量设置密码

image.png

[root@localhost ~]# cat ifmuilttest.sh  

#! /bin/bash

# read -p 输入

# for in 定义一个变量

# $? -eq 0 判断是否执行成功

# &> /dev/null 指向黑洞文件

# `` 反引号执行shell命令

read -p "请输入创建用户的新密码:" PASSWD

for uname in `cat ifmuiltusertest.txt`

do

id $uname &> /dev/null

if [ $? -eq 0 ]

then

echo "已存在"

else

useradd $uname &> /dev/null

echo "PASSWD"|passwd−−stdinPASSWD" | passwd --stdin uname &> /dev/null

if [ $? -eq 0 ]

then

echo "$uname,创建成功"

else

echo "$uname,创建失败"

fi

fi

done

image.png

--双分支if+for循环结合--

image.png

[root@localhost learnlinux]# cat CheckHosts.sh

#! /bin/bash

# 通过定义变量代替反引号shell执行

TEST=$(cat ~/learnlinux/ipadds.txt)

for ip in $TEST

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

image.png

while语句

image.png

--多分支if+while循环语句--

[root@localhost learnlinux]# cat whiletest.sh  

#! /bin/bash

# $RANDOM 随机数(范围为0~32767)

# expr % 1000 随机数对1000取余

# while ture 循环到真后才停止

# let int++ 赋值

# exit 0  over the game  

price=(expr(expr RANDOM % 1000)

TIMES=0

echo "商品实际价格为0-999 之间,猜猜看是多少?"

while true

do

read -p "请输入您猜测的价格数目:" INT

let TIMES++

if [ INT−eqINT -eq price ] ; then

echo "恭喜您答对了,实际价格是 $price"

echo "您总共猜测了 $TIMES 次"

exit 0

elif [ INT−gtINT -gt price ] ; then

echo "太高了!"

else

echo "太低了!"

fi

done

image.png

case语句

image.png

--case语句多范围--

[root@localhost learnlinux]# cat Checkkeys.sh  

#! /bin/bash

# case in 多个范围匹配数据,匹配成功后执行相关命令结束

# 空格

read -p "请输入一个字符,并按Enter 键确认:" KEY

case "$KEY" in

[a-z] | [A-Z])

echo "您输入的是字母。"

;;

[0-9])

echo "您输入的是数字。"

;;

*)

echo "您输入的是空格、功能键或其他控制字符。"

esac

image.png

计划执行服务

at命令

一次性计划任务

[root@linux ~]# at 23:30

at > systemctl restart httpd

at > 此处请同时按下Ctrl + D 组合键来结束编写计划任务

job 3 at Mon Apr 27 23:30:00 2017

[root@linux ~]# at -l

3 Mon Apr 27 23:30:00 2017 a root

永久执行计划任务

[root@linux ~]# echo "systemctl restart httpd" | at 23:30

job 4 at Mon Apr 27 23:30:00 2017

[root@linux ~]# at -l

3 Mon Apr 27 23:30:00 2017 a root

4 Mon Apr 27 23:30:00 2017 a root

删除计划任务

[root@linuxe ~]# atrm 3

[root@linux ~]# at -l

4 Mon Apr 27 23:30:00 2017 a root

crontab命令

创建、编辑计划任务的命令为“crontab -e”

查看当前计划任务的命令为“crontab -l”

删除某条计划任务的命令为“crontab -r”

以管理员的身份参数来编辑他人的计划任务crontab 命令中加上-u

记住命令口诀:“分、时、日、月、星 ,末尾挂命令”

image.png

image.png

所有命令一定要用绝对路径的方式来写

逗号(,)来分别表示多个时间段“8,9,12”表示8 月、9 月和12 月

减号(-)来表示一段连续的时间周期“日”的取值为“12-15”表示每月的12~15 日

除号(/)表示执行任务的间隔时间“/2”表示每隔2 分钟执行一次任务

** * * *五个星星分别代表五个时间段,不用的时间段用*表示,不能省略

定期备份与删除

[root@linux ~]# whereis rm

rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz

[root@linux ~]# crontab -e

crontab: installing new crontab

[root@linux ~]# crontab -l

#在每周一三五的凌晨三点二十五对home目录进行打包

25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home

#在周一到周五每天凌晨一点对tmp目录进行清理

0 1 * * 1-5 /usr/bin/rm -rf /tmp/*

结语

简问简答

分别解释Shell 脚本中0与0 与3 变量的作用。

答:在Shell 脚本中,0代表脚本文件的名称,0 代表脚本文件的名称,3 则代表该脚本在执行时接收的第三

个参数


if 条件测试语句有几种结构,最灵活且最复杂的是哪种结构?

答:if 条件测试语句包括单分支、双分支与多分支等三种结构,其中多分支结构是最灵活

且最复杂的结构,其结构形式为if…then…elif…then…else…fi


for 条件循环语句的循环结构是什么样子的?

答:for 条件循环语句的结构为“for 变量名 in 取值列表 do 命令序列 done”


在while 条件循环语句中使用true 作为循环条件,那么会发生什么事情?

答:因条件测试值永久为true,因此脚本中循环部分会无限地重复执行下去,直到碰到exit命令才会结束


需要依据用户的输入参数执行不同的操作,最方便的条件测试语句是什么?

答:case 条件语句


Linux 系统的长期计划任务所使用的服务是什么,其参数格式是什么?

答:长期计划任务需要使用crond 服务程序,参数格式是“分、时、日、月、星期命令”

如果想根据教程实践的朋友们可以通过阿里云ecs服务器免费试用,入口如下

入口一:新人免费试用

入口二:大学生免费试用

入口三:试用优惠服务器

入口四:试用优惠服务器

入口五:建站特惠

目录
相关文章
|
2天前
|
Linux Shell 数据安全/隐私保护
|
3天前
|
域名解析 网络协议 安全
|
5天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
20 2
6种方法打造出色的Shell脚本
|
10天前
|
监控 Linux Shell
|
9天前
|
运维 监控 网络协议
|
1天前
|
Linux 开发工具
linux文本管理命令
本文档介绍了Linux系统中常用的文本处理命令,包括`echo`、`cat`、`head`、`tail`、`wc`、`less`、`grep`以及重定向符号的使用方法和练习题。此外,还详细讲解了VIM编辑器的特点、工作模式、常用快捷键和高级技巧,帮助用户高效地进行文本编辑和处理。
17 4
|
2天前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
10天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
35 6
|
6天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
6月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
107 0