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 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
619 13
|
3月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
431 21
|
3月前
|
监控 Linux
Linux系统中使用df命令详解磁盘使用情况。
`df`命令是Linux系统管理员和用户监控和管理磁盘空间使用的重要工具。掌握它的基本使用方法和选项可以帮助在必要时分析和解决空间相关问题。简洁但功能丰富,`df`命令确保了用户可以快速有效地识别和管理文件系统的空间使用情况。
212 13
|
1月前
|
监控 Linux Shell
linux命令
常用 Linux 命令汇总
|
3月前
|
Linux
Linux命令拓展:为cp和mv添加进度显示
好了,就这样,让你的Linux复制体验充满乐趣吧!记住,每一个冷冰冰的命令背后,都有方法让它变得热情起来。
235 8
|
2月前
|
Linux C++
每天一个linux命令(8):cp 命令
cp 命令是 Linux 中用于复制文件或目录的命令。它的名字来源于英文单词 copy。这个命令非常常用,特别是在需要备份文件或创建文件副本时。
72 0
|
3月前
|
安全 Linux 定位技术
Linux环境下必备的基础命令概览
以上就是Linux系统中的基本命令和工具,掌握它们就能帮你在Linux世界里游刃有余。这其实就像是学习驾驭一辆新车,熟悉了仪表盘,调整好了座椅,之后的旅程就只需要享受风驰电掣的乐趣了。
87 4
|
Shell 索引
shell脚本入门到实战(四)- 数组
shell脚本入门到实战(四)- 数组
130 0
|
Shell
shell脚本入门到实战(三) - 变量
shell脚本入门到实战(三) - 变量
147 0
|
Shell Linux 人机交互
shell脚本入门到实战(二)--shell输入和格式化输出
shell脚本入门到实战(二)--shell输入和格式化输出
650 0

热门文章

最新文章