执行shell脚本中declare: not found

2024-03-14 21:18

本文主要是介绍执行shell脚本中declare: not found,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 


    在学习 Shell 脚本的时候,有两个例子在运行时出现异常。比如,我在 test-dash.sh 脚
    本输入如下内容:
        echo -e "Trekshot. /a /n"
        declare -i number=7
        echo $number
    在 Ubuntu 系统下使用 sh test-bash.sh 运行将出现如下提示信息:
        -e Trekshot.

        test-dash.sh: 2: declare: not found:

    有两个问题:
      a. echo 的参数 '-e' 怎么也打印出来了?
      b. 一个简单的整数声明语句为何提示 "declare: not found"?
    
    1.
    出现此问题的原因并非代码本身有误,而是 Ubuntu 系统的问题。我们在编写脚本时,第一
    行经常要写这么一行内容:#!/bin/bash. 这是对该脚本所使用的 shell 进行声明,因为
    Linux 上的 shell 并非只有一种,而各个 shell 的语法是由差别的。之所以把 echo 命令
    的参数误打出来,就是因为 sh 命令没有理解该语法,即当前使用的并不是 bash.下面来证
    明:

    获取 /bin 中相关文件的属性:
        -rwxr-xr-x 1 root root 725136 2008-05-13 02:48 bash
        -rwxr-xr-x 1 root root  87924 2008-06-21 00:07 dash
        lrwxrwxrwx 1 root root      4 2010-03-25 14:29 sh -> dash

    这表明在执行 sh test-dash.sh 的时候,我们使用的是一个叫 "dash" 的命令(注意 sh
    实为链接文件),而并不是脚本第一行中声明的 bash. 这就是上面现象的原因。 其实,如
    果使用 bash test-dash.sh 命令执行的话,上面两个错误根本不会出现。
    
    2.
    dash(Debian Almquist SHell) Ubuntu 自 6.10 后,将先前的 bashshell 更换成了
    dash (有待考证). 在设置 dash 的说明中有下面文字:

        The default /bin/sh shell on Debian and Debian-based systems is bash.

        However, since the default shell is required to be POSIX-compliant, any
        shell that conforms to POSIX, such as dash, can serve as /bin/sh. You may
        wish to do this because dash is faster and smaller than bash.
    
    大致意思是说默认的 shell 是 bash shell, 但只要是能兼容 POSIX 的 shell 都可以,而
    dash 比 bash 速度更快、更小巧,因此 Ubuntu 安装了 dash.
    
    3.
    怎么能把 dash 去掉而使用默认的 bash?使用如下命令:
        sudo dpkg-reconfigure dash
    此命令是对已安装的包进行重新配置,在菜单(dash-bash-sh.png)中选择是否将 sh 链接

 

    到 dash (Install dash as /bin/sh?) 选择否即可。

    附图一:Ubuntu 下设置 dash 界面

  

这篇关于执行shell脚本中declare: not found的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/809753

相关文章

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

web网络安全之跨站脚本攻击(XSS)详解

《web网络安全之跨站脚本攻击(XSS)详解》:本文主要介绍web网络安全之跨站脚本攻击(XSS)的相关资料,跨站脚本攻击XSS是一种常见的Web安全漏洞,攻击者通过注入恶意脚本诱使用户执行,可能... 目录前言XSS 的类型1. 存储型 XSS(Stored XSS)示例:危害:2. 反射型 XSS(Re