首页 > 系统相关 >运行shell脚本提示“语法错误: 未预期的文件结尾”

运行shell脚本提示“语法错误: 未预期的文件结尾”

时间:2022-10-31 22:02:24浏览次数:49  
标签:语句 shell 结尾 语法错误 expr number echo exit 执行

当时正在写一个小需求,shell脚本实现的功能是:通过 read 读入变量实现加减剩除等,而且要判断一个输入的2个变量是否为空,为空值则退出。输入的变量不是数字则退出。

自己编写的代码如下

#! /bin/bash
read -p "Ple input two num:" a b
if [ ${ #a } -le 0 ] && {
echo "this first number is null"
exit 1
}
if [ ${ #b } -le 0 ] && {
echo "this second number is null"
exit 1
}

expr $a +2 &>/dev/null
revecd_A=$?
expr $b +3 &>/dev/null
revecd_B=$?
if [ $revecd_A -ne 0 -o $revecd_B -ne 0 ];then
echo "ple input two number"
exit 1
fi

echo "a+b=$(($a+$b))"
echo "a-b=$(($a-$b))"
echo "a/b=$(($a/$b))"
echo "a%b=$(($a%$b))"
echo "a**b=$(($a**$b))"

然后运行的时候提示错误

运行shell脚本提示“语法错误: 未预期的文件结尾”_shell脚本

后来检查发现多了if

运行shell脚本提示“语法错误: 未预期的文件结尾”_shell脚本_02

修改正确后代码如下

#! /bin/bash
read -p "Ple input two num:" a b
[ ${#a} -le 0 ] && {
echo "this first number is null"
exit 1
}
[ ${#b} -le 0 ] && {
echo "this second number is null"
exit 1
}

expr $a + 1 &>/dev/null
revecd_A=$?
expr $b + 1 &>/dev/null
revecd_B=$?
if [ $revecd_A -ne 0 -o $revecd_B -ne 0 ];then
echo "not unmber,ple input again"
exit 1
fi

echo "a+b=$(($a+$b))"
echo "a-b=$(($a-$b))"
echo "a/b=$(($a/$b))"
echo "a%b=$(($a%$b))"
echo "a**b=$(($a**$b))"

运行shell脚本提示“语法错误: 未预期的文件结尾”_shell脚本_03

验证结果:

运行shell脚本提示“语法错误: 未预期的文件结尾”_shell脚本_04

反思总结:

1.

if语句有相应的语法搭配:如  

(1)
if [ command ].... ;then
符合条件执行语句
fi

(2)
if [command]
符合条件执行语句
else
否则执行什么
fi
(3)
if [command];then
符合条件执行语句
elif [command];then
如果符合这个条件,则执行语句
else
否则执行这个语句
fi

2.expr用于整数计算

如何expr 1+b,因为b不是整数,所以相加后运行结果就会出现错误,执行结果返回不是0.

根据执行成功返回结果是0进行判断 1和输入的传参变量是否是整数。


$?  获取执行上一个指令的执行状态返回值,0为成功,非零失败。


慢慢与你并肩


标签:语句,shell,结尾,语法错误,expr,number,echo,exit,执行
From: https://blog.51cto.com/u_14045290/5811316

相关文章

  • shell编程 不全
    shell编程>>>![image-20220331084804558](C:\Users\Windows\AppData\Roaming\Typora\typora-user-images\image-20220331084804558.png)>>>>![image-202203310850......
  • PowerShell DSC由哪个进程运行?
    查询msft_providersGet-WmiObjectmsft_providers|selectprovider获得进程$dscProcessID=Get-WmiObjectmsft_providers|Where-Object{$_.provider-like'ds......
  • 学习笔记-无字母数字Webshell
    无字母数字Webshell相关文章&Source&Reference记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门)一些不包含数字和字母的webshell无字母数字W......
  • shell脚本之函数
    函数定义函数格式一:function函数名{命令序列}格式二:函数名(){命令序列}#####main#####可以直接在主代码区直接使用函数名调用函数删除函数格式:unset 函......
  • shell脚本之循环语句
    一、echo命令–输出字符串或提取Shell变量的值1、格式2、常用参数 常用的转义字符如下:\b转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;“\b"......
  • shell编程中的循环语句
    一、for循环 for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done之间),直到所有元素取尽为止。其中,串行是一些字符串的......
  • Linux管道命令与shell编程(隐私版)
    管道相关命令目标​​cut​​​​sort​​​​wc​​​​uniq​​​​tee​​​​tr​​​​split​​​​awk​​​​sed​​准备工作vimscore.txtzhangsan689926lisi......
  • 漏洞评分高达9.8分!Text4Shell 会是下一个 Log4Shell吗?
    在过去的几天里,ApacheCommonsText库中一个名为Text4Shell的新漏洞引起很大的轰动,该漏洞存在于ApacheCommonsText1.5到1.9版本中。此警报于10月18日发布,此前检测到......
  • Shell脚本基础简述
    一、shell的定义1.1、shell的基本概念shell:介于系统内核与用户之间,负责解释命令行1.2、shell脚本的应用(1)重复性操作(2)交互性任务(3)批量事务处理(4)服务运行状态监控(5)定时任......
  • 在shell脚本中定位自己的位置
    有时候,出于方便,需要给某些第三方软件编写启动脚本。这些第三方软件可能打包了自己所需要的库,只有通过相对路径才能访问这些库。这就需要在启动脚本中探测软件的根目录,使得......