第一个shell脚本


学习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.中括号[ ]的使用

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值