第一个shell脚本

10 阅读 作者:孤影残空 2020-02-29


学习Linux有一段时间了,在学习了部分Linux命令、正则表达式以及shell指令后,开始尝试shell脚本的练习。 (第一次写博客,写的不好多多包涵!)

一.编写脚本

打开MobaXterm编辑器,连上主机后新建一个shell文件employee.sh,输入如下代码:

#!/bin/bash
# This shell is used to calculate how long you can be a formal worker!

read -p "Please input the date you can be a formal worker :" date1
#测试一下输入内容是否正确,利用正则表达式
date_d=$(echo ${date1} |grep '[0-9]\{8\}')  #看看是否有八个数字
if [ "${date_d}" == "" ]; then
   echo "You input the wrong date format.... "
   exit 1
fi
#开始计算日期
declare -i date_for=$(date --date="${date1}" +%s)  #转正日期秒数
declare -i date_now=$(date +%s)  #现在日期秒数
declare -i date_total=$((${date_for}-${date_now}))  #剩余秒数统计
declare -i date_d=$((${date_total}/60/60/24))  #转为日数
if [ "${date_total}" -lt "0" ]; then  #判断是否已转正
   echo "You had been a formal worker for " $((-1*${date_d})) "days"
else
   declare -i date_h=$(( $(( ${date_total}-${date_d}*60*60*24 )) /60/60 ))
   echo "You will be a formal worker after ${date_d} days and ${date_h} hours."
fi

二.执行方法

执行方法1:

chmod +x ./employee.sh #使脚本具有执行权限
./employee.sh #执行脚本

在这里插入图片描述
执行方法2:

sh employee.sh

在这里插入图片描述

三.调试

语法检查

-n选项只做语法检查,而不执行脚本

sh -n employee.sh

启动调试

sh -x employee.sh

进入调试模式后,shell依次执行读入的语句
在这里插入图片描述

中断调试

在调试过程中可以按Ctrl + Z中断调试,观察结果,然后再按fg键继续调试即可。

四.解释说明

read -p 从键盘输入中读取变量,类似于echo的作用,它的另一种方式是echo+说明 ;read+变量 ;

$ {date1} 引用date1这个变量,{}可以不加,不过为了使你的代码更加规范最好加上;

| 管道符,将符号前面命令的结果丢给符号后面的命令;

\ 脱义字符,因为{}在shell中有特殊含义,所以需使用 \ 将其转换为普通字符;

grep ‘[0-9]\ {8\ }’ 取8个数字;

date 获得当前系统时间,date --date="${date1}" +%s则是获得date1的时间,+%s是将其转为秒。date的详细用法可参考此文章

关于shell里面的除法,得到的结果是整数;

shell里面的数学运算要使用双括号 (());

if 条件判断,可以使用((判断条件)),这种情况里面的条件判断符可以使用<、>等符号,也可以使用[ ],但是就不能使用<、>等符号了,要使用 -lt 表示小于这种格式;

五.错误诊断

1.Linux使用vim出现E325:ATTENTION错误

这是由于在编辑该文件的时异常退出,而vim在编辑文件时会创建一个交换文件swap file以保证文件的安全性。所以在再每次打开这个文件都会出现这个警告,为了去掉这个警告,我们只需要删除这个swap文件即可。该swap文件是隐藏的,我们可以通过ls –la命令查看到。使用rm命令进行删除即可。

2.syntax error near unexpected token `('
在这里插入图片描述

这个是因为在引用变量时$与(之间不能有空格。

3.中括号[ ]的使用

在中括号[ ]内的每个组件都要用空格来分隔;
在中括号内的变量,最好都以双引号括号起来;
在中括号内的常数,最好都以单或双引号括号起来;

原文地址:https://blog.csdn.net/fys_CSDN/article/details/103148676
热门教程
SHELL脚本企业级案例sshkey架构批量分发文件expect非交互式批量分发密钥 0
LINUX运维之shell自动化安装与自动化部署 0
LINUX系统之Shell脚本高级编程自动化运维实战 0
Linux脚本编程shell编程入门到实战教程 0
十多个Shell脚本编程实战经典案例 0
C++最新就业班第四期教程全集 0
利用Shell脚本生成全局唯一UUID 0
C语言生成全局唯一的UUID库 libuuid是一个用于生成UUID的C库 0
C++利用Boost库生成UUID boost::uuids::random_generator() 0
QT通过QUuid类实现了UUID的生成 0
Windows下提供了函数CoCreateGuid用于生成UUID 0
Java生成UUID的方法 0
QT判断文本编码的方法QTextCodec::codecForName 0
QT框架提供的强制类型转换方法qobject_cast qgraphicsitem_cast 0
怎么设置QToolBar按钮间距 0
QT利用QFileDialog实现对文件和目录的选择 0
QT获取用户对指定文件的权限,是否可读,可写这些 QT给指定文件重命名 0
设置或获取整个 URL 为字符串 设置或获取 href 属性中在井号“#”后面的分段 0
layui隐藏列的二种设置方法 hide:true 0
从PHP框架剥离的判断是否为手机移动终端的函数 0
相关文章
Android FFMPEG 编译脚本 16
shell脚本:检测磁盘空间和inode使用率/新文件/网卡流量 16
shell 正则表达式 16
shell脚本部署mysql主从 16
centos7 shell脚本一键安装php环境全家桶 16
HDFS的shell命令操作-大萝卜博客 16
Shell 脚本的时间的加减,以及时间差的计算 16
剑指offer 字符流中第一个不重复的字符 16
shell脚本:备份数据库、代码上线 16
shell 命令/程序 摘要记录 16
第一个shell脚本 16
Unity脚本基础 16
shell脚本编程(一) 变量、条件判断、循环 16
数据库脚本可重复执行的思考 16
开题&mdash;&mdash;我的第一个网站(1) 16
shell语言declare用法 16
ngixn负载+keepalived高可用shell脚本 16
centos7系统shell一键keepalived高可用 16
淘宝双十一自动化领喵币python脚本 16
初识shell 16