Linux运维之初识shell
一.补充知识点
1.系统定时任务
系统定时任务需要用到crontab
命令,但是使用此命令有一个前提,即需要打开crond
服务。为了不那么复杂,可以直接使用我之前学的systemctl
命令重新启动crond
服务。
语法:``crontab [-e -l -r] `
选项:-e 编辑crontab定时任务;-l 查询系统crontab任务;-r 删除当前用户的所有crontab任务
参数:
项目 含义 范围 第一个“*” 一小时当中的第几分钟 0-59 第二个“*” 一天当中的第几个小时 0-23 第三个“*“ 一个月当中的第几天 1-31 第四个“*” 一年当中的第几天 1-12 第五个“*” 一周当中的星期几 0-7 参数特殊符号:
特殊符号 含义 * 代表任意时间 , 代表不连续的时间 - 代表连续的时间 */n 代表每隔多久执行一次
注意,这里使用crontab -e
进入编辑后(界面此时是一个vim编辑器),先输入要设置的5个“*”,然后输入命令保存即可。
2.克隆虚拟机
之前我们了解了虚拟机快照技术,这对我们个人平时试错有很大的帮助,同时这里再补充一种技术,克隆虚拟机。它不仅能有助于恢复,同时对如果想把我们的虚拟机分享给别人(假设你的虚拟机配置了许多东西,别人重新安装配置很麻烦,而你们需要相同工作环境),那么这个时候使用克隆虚拟机技术就相当方便了。
如果你需要使用克隆技术,这里有一个其他博主的链接,或许对你有帮助虚拟机克隆
二.初识shell
1.shell
Shell (外壳)是一个用C语言编写的程序,它是用户使用Linux 的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
2.脚本
脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑)。常见的脚本: JavaScript, VBScript,ASP, JSP, PHP, SQL, Perl, Shell, python, Ruby, JavaFX,Lua等。
3.常见shell
在Linux中有很多类型的shell, 不同的shell具备不同的功能,shell 还决定了脚本中函数的语法,Linux中默认的shell是/bin/bash,流行的shell 有ash、bash、 ksh、 csh、zsh等,不同的shell都有自己的特点以及用途。
大多数Linux系统默认使用的shell, bash shell是Bourne shell的一个免费版本,它是最早的Unix shell, bash 还有一个特点, 可以通过help 命令来查看帮助。包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。
4.shell基础
- 约定俗成,文件以.sh结尾代表一个shell文件
- shell文件开始必须是
#!/bin/bash
,代表选择这个版本解释器 - 执行shell文件。使用命令
bash(sh) 路径
其实执行shell文件的方式有许多中,但是上面这种不需要任何其他命令辅助,其他方式或多或少都有一些问题,使用这一种即可。
三.shell变量
1.系统预定义变量
$HOME
、$PWD
、$SHELL
、$USER
等是系统预定义的变量,是环境变量,在所有的shell文件中都能使用。
关于环境变量(全局变量)或者说系统预定义变量可以参考我的上一篇博客:环境变量
补充:
Bash是一种Unix/Linux操作系统的命令行解释器,它允许用户在终端上输入命令并执行它们。可以单独使用bash命令来启动一个新的Bash shell会话,在该会话中,您可以执行各种命令和操作。例如,在终端上输入bash
并按Enter键可以启动新的Bash shell会话。此时,您将看到一个新的命令提示符,表示您现在位于一个新的Bash shell中,可以在此处输入各种命令以进行操作。要退出Bash shell会话,请输入exit
并按Enter键即可。
2.自定义变量
1.基本语法
- 定义变量:变量名=变量值,注意,=号前后不能有空格
- 撤销变量:unset 变量名
- 声明静态变量(只读变量,无法更改):
readonly 变量
,注意:不能 unset
2.变量定义规则
- (1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
- (2)等号两侧不能有空格
- (3)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
- (4)变量的值如果有空格,需要使用双引号或单引号括起来
3.演示
3.特殊变量
1. $n
$n
(功能描述:n 为数字,$0
代表该脚本名称,$1-$9
代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
touch parameter.shvim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
[atguigu@hadoop101 shells]$ chmod 777 parameter.sh
[atguigu@hadoop101 shells]$ ./parameter.sh cls xz
==========$n==========
./parameter.sh
cls
xz
2.$#
$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)
vim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
echo '==========$#=========='
echo $#
[atguigu@hadoop101 shells]$ chmod 777 parameter.sh
[atguigu@hadoop101 shells]$ ./parameter.sh cls xz
==========$n==========
./parameter.sh
cls
xz
==========$#==========
2
3.$*、$@
$*
(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)$@
(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
vim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
echo '==========$#=========='
echo $#
echo '==========$*=========='
echo $*
echo '==========$@=========='
echo $@
[atguigu@hadoop101 shells]$ ./parameter.sh a b c d e f g
==========$n==========
./parameter.sh
a
b
==========$#==========
7
==========$*==========
a b c d e f g
==========$@==========
a b c d e f g
4.$?
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
./helloworld.sh
hello worldecho $?
0
四.运算符和条件判断
1.运算符
基本语法:$((运算式))
或$[运算式]
在其他语言中,定义变量的方式你应该不陌生,但是如果在shell中定义变量a=1+5
,你可以尝试一下他输出的是什么,针对shell里面的运算,有一个新的命令expr
可以计算,但由于乘法运算的星号在shell中有其他意思,它会报错,所以才设置了运算符。
实际操作:
2.条件判断
语法:(1)test condition (2)[ condition ](注意 condition 前后要有空格)两种方式任选一种即可
注意:条件非空即为 true,[ atguigu ]返回 true,[ ] 返回 false。
常用判断条件:
(1)两个整数之间比较
- -eq 等于(equal) -ne 不等于(not equal)
- -lt 小于(less than) -le 小于等于(less equal)
- -gt 大于(greater than) -ge 大于等于(greater equal)
注:如果是字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等。
(2)按照文件权限进行判断
- -r 有读的权限(read)
- -w 有写的权限(write)
- -x 有执行的权限(execute)
(3)按照文件类型进行判断
- -e 文件存在(existence)
- -f 文件存在并且是一个常规的文件(file)
- -d 文件存在并且是一个目录(directory)
多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
演示:
五. read 读取控制台输入
在shell变量中我们知道输入.sh文件参数可以通过特殊变量$n的意义进行操作,但是不可能总是这种输入,shell里面也有类似于C语言中scanf()
函数的键盘输入函数,即这里用的read函数。
1.基本语法
- 语法:read (选项) (参数)
- ①选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待 - ②参数
变量:指定读取值的变量名
2.演示代码
$ touch read.sh
$ vim read.sh
#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds :" NN
echo $NN
上面两行为终端输入命令,下下面三行即read.sh文件的内容,运行即可。
六.说明
新星计划:Linux运维@刘晨阳导师创作打卡4!
Linux运维之初识shell相关推荐
- Linux运维对比:Shell运维 VS Python运维
目录 一.目的所在 二.实例 2.1.需求 2.2.通过Shell实现 2.3.通过Python实现 2.4.扩展 Shell Python 主要区别: 实现功能: 跨平台性: 一.目的所在 通过简单 ...
- linux运维对比python,Linux运维对比:Shell运维 VS Python运维 | 求索阁
一.目的所在 通过简单的例子去找出Linux运维中使用shell与使用python的一些不同,分析两者的主要特点 二.实例 2.1.需求 1.查询当前主机是否支持超线程 2. 查询当前内存使用情况 2 ...
- linux 运维高级脚本生成器,Linux运维系列,Shell高级脚本自动化编程实战
课程文件目录: Linux自动化运维系列 Shell高级脚本自动化编程实战 [6.1G] ┣━━01.Shell基础概述 [315.1M] ┃ ┣━━1-1 Shell脚本体系概述.mp4 [154. ...
- 第13章代码《跟老男孩学习Linux运维:Shell编程实战》
本书历史上已出版最实战的Shell高级编程实战书籍,没有之一,和市面书籍不同,本书是作者经过18年的运维工作及教学工作后,创新类企业级实战书籍,适合所有学习及从事Linux相关工作的读者. <跟 ...
- 合格linux运维人员必会的30道shell编程面试题及讲解
超深度讲解shell高级编程实战,截至目前shell编程课程国内培训机构最细的课程,不信请看学员表现的水平. 课程牛不牛,不是看老师.课表,而是看培养的的学生水平,目前全免费中伙伴们赶紧看啊. htt ...
- linux上安装shell编辑器与linux运维面试题
分两个部分 一.安装B-shell解释器 安装cygwin Eclipse要找到安装的bin路径 https://cygwin.com 二.安装编辑器shellEd 下载可以得到一个:net.sou ...
- linux cc脚本,Linux运维知识之Linux简单处理CC攻击shell脚本
本文主要向大家介绍了Linux运维知识之Linux简单处理CC攻击shell脚本,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 第一个脚本是通过查找日志中访问次数过多的ip,并 ...
- linux运维自动化脚本,linux运维自动化shell脚本小工具
linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...
- linux运维基础进阶和shell入门,Linux运维工程师从基础到进阶:Shell变量知识梳理...
原标题:Linux运维工程师从基础到进阶:Shell变量知识梳理 Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言,涵盖的知识点多且杂 ...
最新文章
- 激活函数之logistic sigmoid函数介绍及C++实现
- 数据库学习笔记2--MySQL数据类型
- 【IM】关于参数模型和核模型的理解
- Error Code: 1052. Column '列名' in where clause is ambiguous
- 蓝凌ekp开发_新华教育集团战略升级,携手蓝凌量身定制数字化办公平台
- python网页动图_python,tensorflow线性回归Django网页显示Gif动态图
- java中filehandler_java – 如何配置特定FileHandler的属性
- 20个有用正则表达式
- UG模具设计从入门到精通
- c语言 分数通分,如何用C语言,实现简单的分数化简
- TalkingData
- 中国银联在线支付接口开发——前台支付
- MySQL数据库中存储引擎和数据类型
- N阶幻方入门算法及图解
- 员工试用期转正申请书(泸州老窖)
- c语言 结构体 选择题,c语言结构体共用体选择题新
- 什么是token,如何使用token
- html获取问号后的参数,html问号后的值怎么获取
- 【ZJOI2009】狼和羊的故事
- Invalid bound statement (not found): com.xxx.dao.xxxDao.selectByxx错误