Shell脚本语言是linux系统中内置的一门非常强大的语言,非常善于处理操作系统层面的应用,我们从网上下载的很多应用的安装和启动往往都是用Shell脚本语言写的。可是初步开始使用linux的小伙伴是不是经常会有些应用下载下来,不知道怎么安装或者启动,甚至有的根据作者的安装说明都操作错误。然后就责怪linux系统操作复杂,不人性化等等。还有的小伙伴自己学习linux的时候,看到网上一段不错的代码,复制下来想用下,可是怎么都用不起来,就怪代码不全或者作者骗人。其实,Shell脚本的书写和执行都有很多注意事项的,因为我们平时使用的少,所以没有注意到,今天小编就带大家来一一熟悉下吧!

1、“#!”使用有讲究

#!这一组符号如果出现在脚本的第一行,代表的是指定该shell脚本用哪种类型的shell来解释和执行,即指定解释器。如果#!这个符号出现的位置不是第一行,那么代表这一行是注释行,脚本不执行。如下图所示,#!/bin/bash这一行代表这个脚本是用的bash这个shell来执行的;第三行那个#!就代表这一行是注释的。

图1

我们有时候从网上下载下来的shell脚本不好用,可能就是第一行的Shell脚本语言解释器和我们的默认shell版本不一致导致的。一般我们需要根据第一行的内容来指定解释器。

如果是#!/bin/bash,我们就用bash test.sh来执行test.sh;

如果是#!/bin/dash,我们就用dash test.sh来执行dash.sh

其他脚本程序也都是类似这样的执行方法,要是以前拿到Shell脚本不知道怎么执行的小伙伴,现在知道了吧!

2、脚本注释很重要

通过上文我们已经知道跟在#后面的内容表示注释,注意:如果不是第一行,只要一个#就代表#后面的是注释了,第一行就是用来指定解释器的。

#后面的注释说明是用来给开发者和使用者看的,系统是看不到的,更加不会去执行。开发者通过注释可以知道其他程序员写的脚本什么意思,就算是自己开发的脚本,时间长了,也需要依靠注释来回忆。使用者通过查看注释知道使用的时候需要注意些什么,并不是所有的shell都是拿来就能用的,有的要根据自己的环境微调一下。当然了,注释很少会有中文,所以英语不好的小伙伴记得使用翻译工具。

3、脚本执行方式的不同导致结果不同

第一种就是上面说类似于bash test.sh和dash test.sh这种形式,这种执行方式不要求脚本文件具有可执行权限,即不需要通过chmod命令来改变文件权限。

第二种方式其实之前小编的一篇文章中已经提到过,就是用./test.sh或者path/test.sh这种形式,这种形式就要求脚本文件必须有可执行权限,如果文件没有可执行权限,强行运行,就会弹出permossion denied,命令被拒绝,一旦添加了可执行权限,执行就成功了,详细命令见下图。

图2

第三种方式是一个点好后面加空格,再跟上脚本名,这种形式的功能只在一个shell中执行脚本,而不会产生一个子shell来执行,主要用于shell中嵌套有子shell的情况。如果是有shell的嵌套的情况,不用第三种方式执行,可能就得不到你想要的结果了!如下图所示:

图3

第一次执行echo $user和第二次执行的反馈结果就不一样。

好了,今天的分享就到这里了!小伙伴们有什么不懂的,可以给我留言!如果喜欢本文的话,就给小编点赞、收藏、分享吧!

举报/反馈

linux脚本无法执行命令,为什么Shell脚本执行不成功?原来是这样相关推荐

  1. linux 递归删除 空目录命令,使用shell脚本实现递归删除空目录

    平时一般使用php脚本实现一些文件管理功能,总归没有shell脚本强大,虽然本人不会写shell脚本,但是读懂shell脚本还是没问题的.对于"递归删除空目录"这样简单的功能使用p ...

  2. Linux命令每五分钟执行一次,Linux crontab 每5秒钟执行一次 shell 脚本 的方法

    Linux crontab 每5秒钟执行一次 shell 脚本 的方法 由于 Linux 的 crontab 的定时命令格式如下: minute hour day-of-month month-of- ...

  3. Linux配置脚本导出运行,linux服务器部署jar包以及shell脚本的书写

    背景:记录在linux环境下部署jar程序的过程 1 部署过程记录 1.1 程序结构 这里的main函数就在DemRest2.java 文件中. 为了部署方便,要做到以下两点: 1 在导出的jar包中 ...

  4. 【Shell 脚本进阶】使用 bash 命令对 shell 脚本进行调试

    文章目录 1. 调试常用选项 2. 输出调试信息 2.1 复杂语句展开 2.2 行号信息显示 3. 调试日志打印 4. 常见错误处理 4.1 不存在的变量 4.2 检查语法错误 4.3 发生错误时终止 ...

  5. 嵌入式 Linux 入门(五、Shell 脚本编程上:认识 Shell 脚本)

    大家好,是矜辰所致,嵌入式 Linux入 门第五课,本课开始简单学习一下 Shell 脚本编程. 目录 前言 一.Shell 脚本基础说明 1.1 什么是 Shell 脚本 1.2 Shell 脚本的 ...

  6. 【Java】Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本

    Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本,同时解决了中文乱码的问题. 源代码和Jar包在这里下载:http://download.csdn.net ...

  7. linux shell脚本中调用另一个shell脚本

    先来说一下主要以下有几种方式: 1.fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. 2.exec: exec path/to/foo. ...

  8. BASH命令和SHELL脚本学习

    BASH命令和SHELL脚本学习 转载于:https://www.cnblogs.com/huolong123/p/6228049.html

  9. linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式

    主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...

最新文章

  1. 20.Valid Parentheses (python)
  2. animate inater插件_C4D R20插件下载 旧版插件C4D R20桥接插件INSYDIUMS Plug-In Bridge Cinema 4D R20 免费版 下载-脚本之家...
  3. mysql事务服务_MySQL (事务篇)
  4. C++笔记——自定义函数
  5. Python的多进程锁的使用
  6. Java调用Javascript、Python算法总结
  7. linux mysql配置_Linux下MySQL安装配置 MySQL配置参数详解
  8. 2021最新版谷歌浏览器百度网盘下载
  9. Qt——多语言程序设计
  10. python串口调试助手_python 串口调试工具源码
  11. 计算机无法删除tf卡的内容,SD卡无法格式化数据可以读取,但是删除不掉
  12. 计算机修理工具包价格,电脑修复工具包#200多个联想工程师专用电脑修复小工具打包...
  13. 07-新闻发布系统数据库-新闻信息数据操作
  14. 大学计算机教程王梦倩,【经验共享】中国矿业大学资源学院辅导员王梦倩
  15. 申论是什么额?如何备考,带你走进它
  16. Winform 连接打印机
  17. java毕业设计时装购物系统mybatis+源码+调试部署+系统+数据库+lw
  18. 如何用html制作快速邮箱发到手机qq,简单两步使用node发送qq邮件的方法
  19. 解决项目Unable to find GatewayFilterFactory with name CacheRequestFilter错误
  20. PTA-L1-079 天梯赛的善良 (20 分)(C++)

热门文章

  1. 利用Python搭建用户画像系统
  2. Android自定义组件系列【16】——最帅气的自动滚动广告条
  3. HFSS中金属接地板的理解
  4. 【全志T113-S3_100ask】14-1 linux采集usb摄像头实现拍照(FFmpeg、fswebcam)
  5. MySQL数据库(9):数据类型-时间日期类型
  6. mysql日期用什么类型_mysql存储日期使用什么类型
  7. 常见 JVM 调优参数
  8. 编程语言专题《开发篇,交换*p1和*p2的值中常犯错误》
  9. 百度直播:未来的“知识快的”
  10. 17-表单提交验证及MD5加密