`

#!/bin/bash

阅读更多

 

 

http://www.cnblogs.com/ghj1976/archive/2010/07/12/1775860.html

 

第一次学shell编程,看的文章中说shell程序必须以"#!/bin/sh"开始,也就认为是这样了。

虽然知道在shell中以"#"开始的语句都是注释,但也从没认为"#!/bin/sh"也是注释,就像对C语言程序必须有main函数一样毫无怀疑。

但前些时候又听说"#!/bin/sh"也是注释,可有可无,当时觉得真是一个失败,连基本的语法都分不清。

前几天借了一本书,才真正认识了"#!/bin/sh"。

shell编程是以"#"为注释,但对"#!/bin/sh"却不是。

"#!/bin/sh"是对shell的声明,说明你所用的是那种类型的shell及其路径所在。

如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell。

比如:如果脚本被编写为在Korn Linux中运行,而默认运行shell脚本的为C shell csh,则上述脚本在执行过程中很可能失败。

所以建议大家就把"#!/bin/sh"当成C 语言的main函数一样,写shell必须有,以使shell程序更严密。

 

即: #!/bin/sh 是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径。

其实第一句的#!是对脚本的解释器程序路径,脚本的内容是由解释器解释的,我们可以用各种各样的解释器来写对应的脚本。

比如说/bin/csh脚本,/bin/perl脚本,/bin/awk脚本,/bin/sed脚本,甚至/bin/echo等等。

那我们真的能写一个/bin/echo的脚本文件吗?我们来试试,下面是一个例子:

代码:

#!/bin/echo –e

这只有一行的程序(实际上它也只能是一行,echo程序并不是被设计成像awk那样的编程语言,能写成源程序文件)命名为myecho,加上权限后执行它:
代码:

$ ./myecho "hi\a" ./myecho hi

如果你的echo支持-e选项并且你工作的环境还算安静,你在得到上面的结果的时候也应该听到清脆的终端响铃。但这种程序是毫无作用的。

 

参考资料:

终于明白#!bin/sh是什么意思了
http://blog.sina.com.cn/s/blog_4d32d0b40100fngc.html

分享到:
评论

相关推荐

    shell中第一行#!_bin_bash的作用

    shell中 #!/bin/bash #!/bin/ksh 这些东西是有用的,这些不是注释符,而是说明下面的脚本是在什么shell下面运行的,并且以该shell环境来执行脚本,一个简单的例子

    BCM4322在CentOS 7驱动程序

    CentOS7.4下编译测试通过。改进了程序并增加了安装说明。 # cat README 1、以root身份执行如下语句.../bin/bash for M in lib80211 cfg80211 wl; do modprobe $M &>/dev/null done 这样,驱动就会开机启动啦!

    一个shell的查词脚本

    /bin/bash ARGS=1 E_BADARGS=65 TEM_FILE="/tmp/dict.tmp" if [ $# -ne "$ARGS" ] then echo "Usage:`basename $0` word" exit $E_BADARGS fi # 抓取页面,删除html代码,空行等,只留下想要的内容 curl -s '...

    Linux Crontab Shell脚本实现秒级定时任务的方法

    /bin/bash step=1 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do $(php '/home/www/php/crontab/crontab.php') sleep $step done exit 0 二、crontab -e 输入以下语句,然后:wq 保存退出 ...

    查看apk签名信息方法

    /bin/bash mkdir .temp_for_certificate cd .temp_for_certificate count=0 while [ -n “$1” ] do count=$[$count+1] echo “(#$count) “`basename “$1″`”:” echo “” path=`jar tf “$1” | grep RSA` #...

    linux mac VIM一键配置脚本(YCM可选) 不适用windows

    理论上适用于 Ubuntu,Fedora和RedHat以及CentOS等linux.../bin/bash echo 安装将花费一定时间,请耐心等待直到安装完成^_^ if which apt-get >/dev/null; then sudo apt-get install -y vim vim-gnome ctags xclip as

    ubuntu如何运行.sh文件,.sh文件运行提示脚本异常

    ubuntu执行.sh文件,1 .sh文件是Ubuntu下可执行文件,首先需要确定它的权限是否是可执行的,2、 用vim打开sh文件,3、查看文件格式:4. 修改文件格式: 5. 保存退出: 6. 执行:./filename .../bin/bash

    bash基础用法.docx

    /bin/bash 脚本声明 脚本的概念 将要执行的命令按照顺序保存到一个文本中 给文件相应的权限即可执行 结合控制语句可以完成复杂操作 脚本的应用场景 重复 批量事务处理 自动化运维 定期任务执行 服务器运行监控...

    解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题

    以上所述是小编给大家介绍的解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持! ...

    解析PyCharm Python运行权限问题

    /bin/bash sudo /usr/bin/python "$@" 给到其执行权限: chmod +x ~/bin/python-sudo.sh 第二步 让当前用户执行 sudo python 不需要输入密码执行: sudo visudo -f /etc/sudoers.d/python 此时会自动创建 /etc/

    哈希值竞猜源码纯合约的返奖源码.zip

    /bin/bash PATH=/bin:/sbin:/usr/bin:/usr/local/bin:/usr/sbin step=5 #间隔的秒数,不能大于10 for (( i = 0; i ; i=(i+step) )); do curl http://xxx/index/wpay/auto_transfer3 curl ...

    Centos7.2 7.4 7.6 7.8升级openssh9.6方法和详解(脚本一键升级)

    /bin/bash echo "备份sshd_config配置文件及sshd_pam文件" cp /etc/ssh/sshd_config /etc/ssh/sshd_config_7.4p1_bak cp /etc/pam.d/sshd /etc/ssh/sshd_7.4p1_pam_bak rpm -Uvh openssh-*.rpm chmod 0600 /etc/ssh/...

    hbase-shell批量命令执行脚本的方法

    /bin/bash source /etc/profile exec $HBASE_HOME/bin/hbase shell <<EOF truncate 'tracker_total_apk_fact_zyt' major_compact('t_abc') disable 't_abc' drop 't_abc' create 't_abc', 'info' EOF 以上这...

    02-SHELL编程之流程控制和循环语句

    /bin/bash # Name:ping.sh # Path:/shell02/ # Usage:/shell02/ping.sh # ... #获取远程主机的IP地址(定义变量让用户自己输入) read -p "请输入你要ping的远程主机IP:" IP #使用ping命令来判断是否和远程主机互通...

    shell脚本:一键配置本地yum源仓库

    /bin/bash #date:2020-2-20 #描述:一键配置本地yum源仓库 echo [正在检测是否挂载磁盘----------] mount /dev/cdrom /mnt &> /dev/null cd /mnt/Packages/ if [ $? -eq 0 ] then echo 已将系统安装光盘挂载至/...

    zabbix-agent 客户端一键部署脚本

    /bin/bash #by lhy 2024-1-12 #zabbix-server 5.0 #zabbix-server 5.0 #运行脚本前请把下面的Zabbix_Service修改为zabbix的服务端IP地址 Zabbix_Service=192.168.115.120 #配置安装zabbix源 rpm -Uvh ...

    输出执行操作和打印日志的shell脚本实例

    /bin/bash #log function ####log_correct函数打印正确的输出到日志文件 function log_correct () { DATE=`date “+%Y-%m-%d %H:%M:%S”` ####显示打印日志的时间 USER=$(whoami) ####那个用户在操作 echo “${DATE...

    zabbix 离线docker 部署

    /bin/bash deploy_dir=. # 修改为zabbix server IP # 默认密码: Admin/zabbix SERVER_IP=192.168.2.110 # Run containers function run_containers(){ echo "运行容器..." ## Create network dedicated for ...

    实际生产xtrbackup 备份脚本

    /bin/bash # 00 20 * * * /backups/xtrabackup/script/xtrbackup_script.sh type xtrabackup >/dev/null 2>&1 || { echo >&2 "I require xtrabackup but it's not installed. Aborting."; exit 1; } ### 变量定义 ...

    linux 监视端口是否正常的shell脚本

    /bin/bash port=”80″ restart=”/etc/init.d/httpd restart” EMAIL=”/bin/echo selboo | mutt -s “重新启动httpd” root@selboo.com.cn” netstat -ln |awk ‘/^tcp/ {print $4}’ |grep -q “:$port$” || { #...

Global site tag (gtag.js) - Google Analytics