美文网首页
03-linux系统下shell编程

03-linux系统下shell编程

作者: 爱因斯没有坦 | 来源:发表于2020-02-09 10:36 被阅读0次

在Linux系统中,shell特别擅长系统管理任务,可以作为一种编程语言来自动化某些任务或者传递参数。大部分的任务都是在shell脚本下完成的

1.建立脚本

为了方便识别脚本是shell脚本,我们一般以.sh作为shell脚本的后缀名。

vim script.sh

然后程序必须以下面的行开始(必须放在文件的第一行):

#!/bin/sh

在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。注释内容是不会执行的。

要赋值给一个变量,可以这样写: 变量名=值
取出变量值可以加一个美元符号($)在变量前面:

#!/bin/sh
#对变量赋值:
a="hello world"
# 现在打印变量a的内容:
echo "A is:"
echo ${a}

然后运行

sh script.sh

这个脚本将会输出:

A is:
hello world

Unix命令

在shell脚本中可以使用任意的Unix命令,以下这些命令通常是用来进行文件和文字操作的。

#将文字内容打印在屏幕上  
echo "XXX"
#计算文件行数
wc –l file
#计算文件中的单词数
wc –w file
#计算文件中的字符数
wc -c file
#文件拷贝
cp 源文件 目标目录
#重命名文件或移动文件
mv oldname newname
#删除文件
rm -rf filename
#在文件内搜索字符串
grep '搜索内容' file.txt

管道、重定向

管道 (|) 将一个命令的输出作为另外一个命令的输入。
grep "hello world" file.txt | wc -l
在file.txt中搜索包含有”hello world”的行并计算其行数。在这里grep命令的输出作为wc命令的输入。
重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。

image.png

流程控制

"if" 表达式 如果条件为真则执行then后面的部分:

if ....; then
  ....
elif ....; then
  ....
else
  ....
fi

通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。下面这段代码经常作为例行化脚本的开头。

#如果手动输入参数个数为一个
if [ "$#" == "1" ];
#将手动输入的参数赋值给yestoday
then
    yesterday=$1
#否则取当前系统时间减一天赋值给yestoday
else
    yesterday=$(date -d "-1 day" +"%Y-%m-%d")
fi

#这样执行会将2019-04-01赋值给yesterday
sh lingxing.sh 2019-04-01
 
#这样执行会将真实的昨天日期赋值给yesterday
sh lingxing.sh
 

crontab定时任务

常用的命令

crontab -l            列出当前用户的crontab
crontab -e            编辑当前用户的crontab,默认使用vi,上一篇博客介绍的vim的各种操作在此同样适用
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * command to be executed

五个分别代表 每小时的第几分钟、每天的第几个小时、一个月中的第几天,一年中的第几个月、一周中的第几天。五个后面跟要执行的命令即可。
星号()表示取值范围内的所有值。例如,在hour的位置,表示每小时执行一次,依此类推。

连字符(-)表示一个范围。例如,8-10表示8、9、10。

逗号(,)表示分割指定的数值。例如:3,5-8,12表示3,5,6,7,8,12。

正斜杠(/)表示步进值。例如,分钟的位置为*/5,表示每五分钟执行一次。

如下实例

#每天9点20分执行该脚本,所有日志重定向到/dev/null,注意脚本要写绝对路径
20 9 * * * sh /root/script.sh >/dev/null 2>&1
 
#每周一9点20分执行该脚本
20 9 * * 1 sh /root/script.sh >/dev/null 2>&1
 
#每月一日9点20分执行该脚本
20 9 1 * * sh /root/script.sh >/dev/null 2>&1
 
#每天每小时整执行该脚本
0 * * * * sh /root/script.sh >/dev/null 2>&1
 
#每五分钟执行一次该脚本
*/5 * * * * sh /root/script.sh >/dev/null 2>&1
 
#每个工作日的8到20点每小时整执行该脚本
0 8-20 * * 1-5 sh /root/script.sh >/dev/null 2>&1
  1. /dev/null

这条命令的作用是将标准输出1重定向到/dev/null中。 /dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了>/dev/null之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。

  1. 2>&1

这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。

linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令,所以>/dev/null 2>&1的作用就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了。执行了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中。

image.png

版权声明:本文为CSDN博主「风影楼前」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_23897391/article/details/89129899

相关文章

  • 03-linux系统下shell编程

    在Linux系统中,shell特别擅长系统管理任务,可以作为一种编程语言来自动化某些任务或者传递参数。大部分的任务...

  • 2019-01-25

    Linux系统Shell编程指南 前言 适合人群:有类似C编程基础的人 一、Shell编程介绍 Shell解释型语...

  • day28-2019年4月9日

    shell编程基础 1、为什么要学shell编程? linux系统中会大量得使用shell,工作中也需要...

  • 作业-第07周--课堂-Day28-Shell与Shell编程相

    Day28 课堂作业 1. Shell与Shell编程相关 1.1 为什么要学习Shell编程? Linux系统中...

  • Shell编程基础知识

    关于shell编程基础: 1.为什么要学习shell编程? Linux系统中会大量的使用Shell,工作中我们也需...

  • day28-Shell编程3小时光速入门

    Shell编程3小时光速入门 1、为什么要学习shell编程? Linux系统中会大量的使用Shell,工作中我们...

  • Powershell快速入门(一) 安装和使用

    一说起 Shell 编程,我们大家想到的应该都是Linux 下的 Shell 编程。其实 Windows 下也可以...

  • shell编程

    1.什么是shell编程 shell命令解释器 bach dash 用于Ubuntu系统 csh tcsh 用...

  • shell 案例

    Shell编程一 Shell防范ARP攻击 Shell编程二 Shell防范DDos攻击 Shell编程三 ...

  • shell 第一天

    shell编程初识 1.1 shell编程初识 shell的定义 Shell 是命令解释器 Shell 也是...

网友评论

      本文标题:03-linux系统下shell编程

      本文链接:https://www.haomeiwen.com/subject/dldgxhtx.html