linux脚本无法执行命令,为什么Shell脚本执行不成功?原来是这样
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脚本执行不成功?原来是这样相关推荐
- linux 递归删除 空目录命令,使用shell脚本实现递归删除空目录
平时一般使用php脚本实现一些文件管理功能,总归没有shell脚本强大,虽然本人不会写shell脚本,但是读懂shell脚本还是没问题的.对于"递归删除空目录"这样简单的功能使用p ...
- Linux命令每五分钟执行一次,Linux crontab 每5秒钟执行一次 shell 脚本 的方法
Linux crontab 每5秒钟执行一次 shell 脚本 的方法 由于 Linux 的 crontab 的定时命令格式如下: minute hour day-of-month month-of- ...
- Linux配置脚本导出运行,linux服务器部署jar包以及shell脚本的书写
背景:记录在linux环境下部署jar程序的过程 1 部署过程记录 1.1 程序结构 这里的main函数就在DemRest2.java 文件中. 为了部署方便,要做到以下两点: 1 在导出的jar包中 ...
- 【Shell 脚本进阶】使用 bash 命令对 shell 脚本进行调试
文章目录 1. 调试常用选项 2. 输出调试信息 2.1 复杂语句展开 2.2 行号信息显示 3. 调试日志打印 4. 常见错误处理 4.1 不存在的变量 4.2 检查语法错误 4.3 发生错误时终止 ...
- 嵌入式 Linux 入门(五、Shell 脚本编程上:认识 Shell 脚本)
大家好,是矜辰所致,嵌入式 Linux入 门第五课,本课开始简单学习一下 Shell 脚本编程. 目录 前言 一.Shell 脚本基础说明 1.1 什么是 Shell 脚本 1.2 Shell 脚本的 ...
- 【Java】Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本
Java编写Telnet客户端,连接到Windows的Telnet服务器,执行命令和批处理脚本,同时解决了中文乱码的问题. 源代码和Jar包在这里下载:http://download.csdn.net ...
- linux shell脚本中调用另一个shell脚本
先来说一下主要以下有几种方式: 1.fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. 2.exec: exec path/to/foo. ...
- BASH命令和SHELL脚本学习
BASH命令和SHELL脚本学习 转载于:https://www.cnblogs.com/huolong123/p/6228049.html
- linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式
主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...
最新文章
- 20.Valid Parentheses (python)
- animate inater插件_C4D R20插件下载 旧版插件C4D R20桥接插件INSYDIUMS Plug-In Bridge Cinema 4D R20 免费版 下载-脚本之家...
- mysql事务服务_MySQL (事务篇)
- C++笔记——自定义函数
- Python的多进程锁的使用
- Java调用Javascript、Python算法总结
- linux mysql配置_Linux下MySQL安装配置 MySQL配置参数详解
- 2021最新版谷歌浏览器百度网盘下载
- Qt——多语言程序设计
- python串口调试助手_python 串口调试工具源码
- 计算机无法删除tf卡的内容,SD卡无法格式化数据可以读取,但是删除不掉
- 计算机修理工具包价格,电脑修复工具包#200多个联想工程师专用电脑修复小工具打包...
- 07-新闻发布系统数据库-新闻信息数据操作
- 大学计算机教程王梦倩,【经验共享】中国矿业大学资源学院辅导员王梦倩
- 申论是什么额?如何备考,带你走进它
- Winform 连接打印机
- java毕业设计时装购物系统mybatis+源码+调试部署+系统+数据库+lw
- 如何用html制作快速邮箱发到手机qq,简单两步使用node发送qq邮件的方法
- 解决项目Unable to find GatewayFilterFactory with name CacheRequestFilter错误
- PTA-L1-079 天梯赛的善良 (20 分)(C++)