从#!/bin/bash中想到的...
罪过罪过,开发了N年的SHELL,竟然第一次思考#!/bin/bash是啥意思?真是怀疑以前的的代码是咋开发出来的~
如果要解释#!/bin/bash是啥意思?为啥每个SHELL脚本第一行都写它哪?首先要了解什么是SHELL解释器?
一、SHELL解释器
SHELL解释器是一个程序,是一个C语言写的程序。当我们登录LINUX服务器的时候,我们就开始使用一个解释器程序,一般是/bin/bash,当然也可能是/bin/sh。当我们执行man shell,就会输出具体的作用。
Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file.
二把刀翻译:bash是一个从标准输入或者文件输入的命令解释器
二、解释器的作用
这个非常容易理解,当我们登录服务器,然后显示:
[qiu.li@l-tdata1.tkt.cn6 ~]$
说明已经在bash的里面了,当咱们输入:echo "hello liqiu!",这说明是告诉解释器,输出:“hello liqiu!”
三、#!/bin/bash
明白了上面的东东,就很容易理解咱们开发的SHELL代码,为什么第一行要输入#!/bin/bash了吧,就是要告诉系统,此脚本使用/bin/bash来执行!
那么下面大家可能就想了,能换成别的吗?能不放在第一行吗?
1、能换成别的吗?
答案是肯定的,可以换成别的,比如:“/bin/sh”或者“/bin/awk”。
那么/bin/bash和/bin/sh有啥区别哪?先说共同点,都是脚本语言,并且很多系统都是把sh软连接到bash。区别吗,sh是bash的一个子集
2、能不放在第一行吗?
不行,只有第一行生效,后面的全部当成注释处理。最后加上一点说明,每个脚本开头都使用"#!",#!实际上是一个2字节魔法数字,这是指定一个文件类型的特殊标记,在这种情况下,指的就是一个可执行的脚本。在#!之后,接一个路径名,这个路径名指定了一个解释脚本命令的程序,这个程序可以是shell,程序语言或者任意一个通用程序。
从#!/bin/bash中想到的...的更多相关文章
- bin/bash 和 /bin/sh 的区别
今天在用ssh Secure shell 连接虚拟机中的Ubuntu编写程序时,想比对一下两个源代码有什么差别,但是在一个ssh 客户端下不断的切换很是费劲.于是想着在主机中再添加一个用户.我原本用s ...
- Linux:/bin/bash和/bin/sh的区别
bash.dash(/bin/bash和/bin/sh) 原文:http://www.cnblogs.com/dkblog/archive/2011/04/02/2003822.html Linux中 ...
- #!/bin/sh与#!/bin/bash的区别
Linux 中的 shell 有很多类型,其中最常用的几种是: Bourne shell (sh).C shell (csh) 和 Korn shell (ksh), 各有优缺点.Bourne she ...
- bash、dash(/bin/bash和/bin/sh)的区别
Linux中的shell有多种类型,其中最常用的几种是Bourne shell(sh).C shell(csh)和Korn shell(ksh).三种shell各有优缺点. Bourne ...
- linux shell中的 #!/bin/bash
#!/bin/bash是指此脚本使用/bin/bash来解释执行. 其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径. bash只是shell的一种,还有很多其它shell,如:sh ...
- 转 关于shell脚本中#!/bin/bash and #!/bin/ksh 的说明
1.在文件里面输入一系列命令,可以直接执行吗? 可以.作者认为,这时调用的是当前用户默认使用的shell. 如果其中一个命令有错,后面的命令还是会继续执行下去的 如果说使用了”&& ...
- linux shell脚本中的开头#!/bin/bash的含义
对于linux上需要执行 的shell脚本,通常第一行的内容是 #!/bin/bash 当然有很多时候不规范的写法可以忽略掉这一句,执行起来好像也是ok,结果没什么不一样 .. 这只是因为在我们常用 ...
- Bash 中的 _ 是不是环境变量
首先,我们想到的会是 export(等价于 declare -x)命令: $ export | grep 'declare -x _=' 没有找到,那么结论就是 _ 不是环境变量?当然没那么简单,否则 ...
- Bash 中的 $0 在什么时候不是 argv[0]
每个 C 程序都有一个 main 函数,每个 main 函数都有一个 argv 参数,这个参数是一个字符串数组,这个数组的值是由该 C 程序的父进程在通过 exec* 函数启动它时指定的. 很多人说 ...
随机推荐
- C#编程(十三)----------方法重载
C#支持方法的重载---方法的几个版本有不同的签名即可(即,方法名相同,但是参数个数和/或类型不同).为了冲在方法,只需要声明同名单参数个数或类型不同的方法即可. 注意:两个方法不能仅在返回类型上有区 ...
- 【Centos】centos查看磁盘使用情况
1.查看分区和磁盘 lsblk 查看分区和磁盘 2.查看空间使用情况 df -h 查看空间使用情况 3.分区工具查看分区信息 fdisk -l 分区工具查看分区信息 4.查看分区 cfdisk /de ...
- winform 给textbox 增加 或 减小字体大小 z
private void btnAddFont_Click(object sender, EventArgs e) { float fSize = this.txtResult.Font.Size; ...
- Codeforces Round #131 Div1 B
Problem 给出Ai(i∈[0,9]).表示每一个数字至少须要出现多少次.问有多少个数满足下面三个条件:1. 数至多有N位:2. 数不含有前导0:3. 每一个数 i 出现的次数不少于Ai(mod ...
- JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(下)(各种乱码、验证码、重定向和转发)
HttpServletRequest获取请求头信息 (1)获取客户机请求头 String getHeader(String name) Enumeration<String> getHe ...
- Chapter 4 -- Throwables
TODO: rewrite with more examples Guava's Throwables utility can frequently simplify dealing with exc ...
- 从客户端(SeekingJobs="<B>·</B> 物流规划,<B>·</...")中检测到有潜在危险的 Request.Form 值。
今天提交各东西发觉出错了,错误信息如下: “/”应用程序中的服务器错误. 从客户端(SeekingJobs="<B>·</B> 物流规划,<B>·< ...
- C/C++ 二维数组
使用C语言用到了二维数组 #include <iostream> #include <stdlib.h> using namespace std; ], int row){ ; ...
- Rotate Image leetcode java
题目: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwis ...
- 仿qq底部的提示标记
看到一个比較不错的开源项目,分享给大家: <?xml version="1.0" encoding="utf-8"?> <RelativeLa ...