学习《shell脚本学习指南》一书,记录总结,便于自己回忆,希望对你有帮助! 2.4 自给自足的脚本:位于第一行的 #!

1.Shell脚本执行过程

  当Shell执行一个程序时,会要求UNIX内核启动一个新的进程,以便在该进程里执行所指定的程序。

内核知道如何为编译型程序做这件事。但Shell脚本并非编译型程序;当Shell要求内核执行它时,内核将无法做这件事。

内核会告诉Shell这个我解决不了,接着Shell就会启动一个新的 /bin/sh(标准Shell)副本来执行该程序。

2.为什么Shell脚本要加 #!

  现行的UNIX系统都会拥有好几个Shell,通过哪一种Shell去运行脚本,我们需要告知UNIX内核。这样做有助于执行机制通用化,

让用户得以直接引用任何的程序语言解释器,而并非一个命令Shell。

3.如何设置 #!

方法就是,通过在脚本文件中第一行设置:#! 符号

[root@localhost test]# vim nusers
#! /bin/sh -  当没有Shell选项时,建议写为 "-"
who | wc -l

4.避免几个初级陷阱

  1. #!这一行的长度有限制,系统不同限制从63到1024个字符不等
  2. 不在选项之后放置任何空白,空白会更这选项传递给引用的程序
  3. 你需要知道解释器的完整路径名称。

  

1.2 位于Shell脚本第一行的#!的更多相关文章

  1. hive的shell用法(脑子糊涂了,对着脚本第一行是 #!/bin/sh 疯狂执行hive -f 结果报错)

    hive脚本的执行方式 hive脚本的执行方式大致有三种: hive控制台执行: hive -e "SQL"执行: hive -f SQL文件执行:参考hive用法: usage: ...

  2. bash调试 脚本第一行 加set -x #!/bin/expact -d

    #!/bin/bash set -x 脚本第一行加 #!/bin/expact -d

  3. shell脚本第一课

    shell脚本的文件名一般是以.sh结尾,也可以以其他格式如.txt,甚至不加后缀. 脚本的第一行的#!/bin/bash表示指定脚本执行时的解析器. #!/bin/bash #文件名:test.sh ...

  4. [转]shell脚本每行的执行顺序是怎样

    原文:https://blog.csdn.net/weixin_42609121/article/details/83028000 ---------------------------------- ...

  5. shell脚本命令行参数里的空白符

    看一个小脚本 #!/bin/bash #demonstarting the shift command count= while [ -n "$1" ] ; do echo &qu ...

  6. shell脚本学习第一课

    shell是一种程序设计语言,是访问操作系统内核的服务. Linux的shell种类常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell ...

  7. 在shell脚本中使用alias

    Linux shell有交互式与非交互式两种工作模式.我们日常使用shell输入命令得到结果的方式是交互式的方式,而shell脚本使用的是非交互式方式.   shell提供了alias功能来简化我们的 ...

  8. Shell脚本学习 - 基本内容以及数据格式

    为了捞取日志,自己用python写了一些东西,大致套路就是读取写入文件的操作,放到linux上跑.实际使用时发现要操作的文件有时比较大,直接打开文件找需要的东西可能会有一些效率问题.所以学习一下she ...

  9. shell脚本 入门 —— 符号篇

    shell Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive). Shell还有一种执行命令的方式称 ...

随机推荐

  1. C++ STL 之 multimap案例之员工分组

    #include <iostream> #include <vector> #include <map> #include <string> #incl ...

  2. Activiti使用总结

    工作流在我们日常的工作中用得可谓相当普及,尤其在企业内部管理系统,如考勤.财务.合同等系统中更是离不开它.在我们金融科技领域,工作流主要用于贷款审批.风控审核等环节.早期工作流在企业信息化发挥着很重要 ...

  3. springboot有第三方jar打包成jar

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven ...

  4. DX使用随记--TabControl

    1. 关闭TabControl选项卡: Private Sub TabControl_Main_CloseButtonClick(sender As Object, e As EventArgs) H ...

  5. 编译luacheck Linux版

    最近在写Visual Studio Code的Lua插件,需要把luacheck集成进去.但是luacheck默认只提供了win32版本,见https://github.com/mpeterv/lua ...

  6. rpm的specs学习

    参考 制作rpm包:    https://wangbin.io/blog/it/yum-rpm-make.html linux rpm安装mysql: https://www.jianshu.com ...

  7. VSCode 快捷键定义

    默认的 Toggle explore side bar 快捷键为 Ctrl + B, 但是这和 Vim 的快捷键冲突,解决方法: File  >  Preferences  >  Keyb ...

  8. Tensorflow目录

    0.Tensorflow安装 1.创建会话,启动会话 2.变量 3.Fech_feed 4.线性回归 5.非线性回归 6.MNIST数据集简单分类 7.交叉熵 8.Dropout 9.正则化 10.优 ...

  9. springMVC的详解

    一,springmvc注解特性 1.@Controller 控制器定义在 spring 3.0 中,通过@controller 标注即可将 class 定义为一个 controller 类.为使 sp ...

  10. Redis入门(一)

    Redis入门 什么是Redis Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库,属于非关系型数据库的一种(NoSQL). Redis 与其他 key - val ...