参考:
https://www.runoob.com/linux/linux-shell.html
https://blog.csdn.net/LJFPHP/article/details/78292943
https://www.cnblogs.com/EasonJim/p/8308476.html
https://blog.csdn.net/qq_23143555/article/details/80266937
https://blog.csdn.net/austin_zhou001/article/details/46591169
什么是shell
shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。shell翻译成壳的意思,shell相当于包裹着linux内核的外壳,它提供了一个界面,用户通过这个界面可以访问linux操作系统内核的服务,在这个界面中可以利用linux命令对操作系统发出相关指令。
什么是shell脚本
Shell脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
shell脚本和Linux命令
shell脚本和命令行都能操作linux,但是shell是面向过程的,相当于有了一定的逻辑和过程,而命令行只是单一的操作。
shell脚本可以通过其条件语句和循环语句等,把一系列linux命令结合在一起来实现一些较为复杂的功能,形成一个相当于面向过程的程序。
简单总结,shell脚本就是把一大串linux命令写在一个脚本文件中按照一定的逻辑执行。
shell环境
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了
Linux 的 Shell 种类众多 ,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash或/usr/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
Bourne Again Shell(Bash)在日常工作中被广泛使用,Bash 是大多数Linux 系统默认的 Shell
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
每个bash脚本文件前的#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
#!/usr/bin/env bash和#!/usr/bin/bash
#!/usr/bin/env bash #在不同的系统上提供了一些灵活性。
#!/usr/bin/bash #将对给定的可执行文件系统进行显式控制。
通过/usr/bin/env运行程序,用户不需要去寻找程序在系统中的位置(因为在不同的系统,命令或程序存放的位置可能不同),只要程序在你的$PATH中;
通过/usr/bin/env运行程序另一个好处是,它会根据你的环境寻找并运行默认的版本,提供灵活性。不好的地方是,有可能在一个多用户的系统中,别人在你的$PATH中放置了一个bash,可能出现错误。
大部分情况下,/usr/bin/env是优先选择的,因为它提供了灵活性,特别是你想在不同的版本下运行这个脚本;而指定具体位置的方式#!/usr/bin/bash,在某些情况下更安全,因为它限制了代码注入的可能。
可能在一些系统上/usr/bin/bash没有,而/bin/bash则一定存在的。所以/bin/bash是显示指定的优先选择。