一、什么是shell?

我们平时所说的 Shell 可以理解为 Linux 系统提供给用户的使用界面。Shell 为用户提供了输入命令和参数并可得到命令执行结果的环境。当一个用户登录 Linux 之后,系统初始化程序 init 就根据 /etc/passwd 文件中的设定,为每个用户运行一个被称为 Shell(外壳)的程序。

确切地说,Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至编写一些程序。

二、什么是shell脚本?

与一般命令相比,Shell 除了是一个命令行解释器,同时还是一门功能强大的编程语言,易编写,易调试,灵活性较强。作为一种命令级语言,Shell 是解释性的,组合功能很强,与操作系统有密切的关系,可以在 Shell 脚本中直接使用系统命令。大多数 Linux 系统的启动相关文件(一般在 /etc/rc.d 目录下)都是使用 Shell 脚本编写的。

同传统的编程语言一样,Shell 提供了很多特性,这些特性可以使 Shell 脚本编程更为有用,如数据变量、参数传递、判断、流程控制、数据输入和输出、子程序及中断处理等。

三、Shell的分类

Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux 的 Shell 种类众多,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)

    是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。Bourne Shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种 shell。

  • Bourne Again Shell(/bin/bash)

    Linux默认的脚本种类,它是 Bourne Shell 的扩展。 与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基础上增加了很多特性,可以提供命令补全,命令编辑和命令历史等功能。

  • C Shell(/usr/bin/csh)

    是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似。

  • K Shell(/usr/bin/ksh)

    集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。

这里演示用的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。

在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash

我们可以通过 /etc/shells 文件来査询 Linux 支持的 Shell。命令如下:

$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh

用户信息文件 /etc/passwd 的最后一列就是这个用户的登录 Shell。命令如下:

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x: 1:1 :bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...

可以看到,root 用户和其他可以登录系统的普通用户的登录 Shell 都是 /bin/bash,也就是 Linux 的标准 Shell,所以这些用户登录之后可以执行权限允许范围内的所有命令。不过,所有的系统用户(伪用户)因为登录 Shell 是 /sbin/ndogin,所以不能登录系统。

四、第一个shell脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),内容如下所示:

#!/bin/bash
echo "Hello World !"

#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。运行该脚本,打印命令 echo 会在屏幕上打印出后面的字符串。

五、运行Shell脚本的两种方法

1、作为可执行程序

第一种运行方式是,先使前面的test.sh脚本具有执行权限,然后像运行其它二进制程序一样执行脚本即可:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

注意,一定要写成 ./test.sh,而不是 test.sh,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

2、作为解释器参数

第二种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh

这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

六、Shell注释

1、单行注释

# 开头的行就是注释,会被解释器忽略,像这样

#--------------------------------------------
# 这是一个注释
# author:feng
#--------------------------------------------
##### 用户配置区 开始 #####
#
# 这里可以添加脚本描述信息
#
##### 用户配置区 结束  #####

如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?

每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,不调用这个函数,就不会执行这块代码,达到了和注释一样的效果。

2、多行注释

多行注释还可以使用以下格式:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

EOF 也可以使用其他符号:

:<<'
注释内容...
注释内容...
注释内容...
':<<!
注释内容...
注释内容...
注释内容...
!

参考:

Shell 教程

Shell脚本是什么

转载于:https://www.cnblogs.com/linuxAndMcu/p/11119374.html

Shell脚本之一 Shell脚本简介相关推荐

  1. linux shell命令行及脚本编程实例详解_超全整理!这些Shell编程必备知识你都掌握了吗?...

    正文最近很多粉丝咨询我,被问到了一些Shell编程的问题,看看大家能否答出来: 1.shell脚本千千万,不知道从哪入手 2.没经验缺方法,面试通不过.做事没头绪 3.野路子.没人教自动化,做了几年基 ...

  2. linux 脚本编写基本命令,Linux Shell命令行及脚本编程实例详解

    <Linux典藏大系:Linux Shell命令行及脚本编程实例详解>共15章,分为两篇.主要内容包括:Linux 及Linux Shell简介.初识Linux Shell.常用Shell ...

  3. python调用脚本或shell的方式

    python调用脚本或shell有下面三种方式: os.system() 特点: (1)可以调用脚本. (2)可以判断是否正确执行. (3)满足不了标准输出 && 错误 command ...

  4. 7月11日任务 shell介绍、shell结构和执行 、date命令用法、shell脚本中的变量

    2019独角兽企业重金招聘Python工程师标准>>> 20.1 Shell脚本介绍 • shell是一种脚本语言  aming_linux  blog.lishiming.net ...

  5. 将shell脚本转为python_shell脚本将python脚本加入Linux系统服务

    用shell脚本将Python脚本做成系统服务随着系统的启动而启动,同时又可以通过"service"命令进行管理(start|stop|restart) 新建 FuzzyMatch ...

  6. 69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量

    2019独角兽企业重金招聘Python工程师标准>>> 1.shell脚本介绍: shell是一种脚本语言和传统的开发语言相比,会比较简单: shell有自己语法,可以支持逻辑判断. ...

  7. linux shell命令行及脚本编程实例详解_Linux高手必看的10本经典书籍

    Linux高手必看的10本经典书籍 Linux 是一个开放.灵活.跨平台的操作系统,上至庞大的数据中心,下至可放于掌心中的嵌入式设备,Linux 的身影无处不在. 如果你想成为一名精通 Linux 程 ...

  8. python编写自动化脚本 与shell_脚本安装Discuz论坛(shell + Python 实现自动化安装)...

    实验环境 1.shell 脚本:linux centos 7 系统 2.Python shell 脚本:window 系统 3.其他:python selenium 模块,谷歌浏览器, 谷歌浏览器驱动 ...

  9. linux脚本编程(shell)浅介

    linux脚本编程(shell)浅介 2006-01-10 11:45 27693人阅读 评论(18) 收藏 举报 脚本shelllinux编程bash语言 linux脚本(shell)编程 啊,昨天 ...

最新文章

  1. 特斯拉D1芯片遭实名diss:内存到封装都成问题,网友:反正不能公开测评
  2. 新的一年,碎片化学习前端,我推荐这几个公众号~
  3. 在Ruby中使用&运算符(new_array- arr&old_Array)创建数组实例
  4. YurunOAuthLogin v2.0.2,第三方 OAuth2 授权一把梭
  5. CString常用方法
  6. python找不到指定文件夹_python找不到指定文件
  7. SQLite适用的范围
  8. java----内省
  9. Axure 8.1.0.3377 激活码 授权码 授权秘钥
  10. k8s不适合mysql_K8S 配置mysql配置文件不生效问题处理
  11. 根目录在哪里 根目录下的目录有什么作用
  12. 30分钟java桌球小游戏,30分钟完成桌球小游戏项目
  13. 操作系统:进程间通讯的七种方式
  14. Verilog 三种计数器写法
  15. Java的开发架构---浅谈
  16. 【Markdown 1】什么是Markdown?怎么用? - Markdown语法个人简述总结(图文)(常用)
  17. UE4官方文档学习笔记材质篇——UV坐标动画,凹凸贴图偏移
  18. labview的公式Express VI和公式节点
  19. 有哪些值得一试的 epub阅读器
  20. Packet Tracer 思科模拟器练习8

热门文章

  1. initializeAdvisorChain
  2. Hyperledger(超级账本)的worldstate和SAP CRM的CRMD_CUMULAT_H
  3. 5d4的白平衡模式_佳能5D4有什么白平衡模式?ISO是多少?
  4. mysql主主 主键冲突_mysql主从复制原理,主主复制时主键冲突解决
  5. 目前最厉害的象棋软件_qq什么引流方式最厉害,QQ引流目前最有效的方法
  6. python子类定制_在Python中实现可定制的Lexer类
  7. 头条号个人中心登录_微信个人订阅号开通了创作领域的认证!这是要跟头条看齐了吗?...
  8. js 引用 java常量_java调用JS 与JS 调java
  9. js跳转页面时添加header_鸿蒙应用开发踩坑记之路由跳转
  10. base.dispose(disposing) 未将对象引用到实例_程序员深入理解asp.net c#值类型和引用类型...