1.什么是shell?

shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。 说到底,Shell是用户与内核进行交互操作的一种接口,目前*流行的Shell称为bash Shell

Shell是解释执行的脚本语言,所谓脚本语言就是不用编译就可以直接执行的语言。在Shell中可以调用Linux系统命令。

shell的*强大的重要特性是它自身就是一个解释型的程序设计语言,shell 程序设计语言支持在高级语言里所能见到的*大多数程序控制结构,比如循环,函数,变量和数组。shell 编程语言很易学,并且一旦掌握后它将成为你的得力工具。任何在提示符下能键入的命令都能放到一个可执行的shell程序里,这意味着用shell语言能简单地重复执行某一任务。

场景:只知道写shell脚本,却不知道什么是shell?那shell是什么呢?找到了之前在腾讯课堂上看的视频,这是课件笔记

你学Linux的话,不懂shell等同于不懂linux
shell是操作系统的*外层,shell可以合并编程语言以控制进程和文件,以及启动和控制其他程序。
简单来说:shell就是一个用户跟操作系统之间交互的命令解释器

感觉像是java和虚拟机的关系一样

在一些复杂的Linux维护工作中,大量重复的输入和交互操作不但费时费力,而且容易出错.
编写脚本的好处:批量的处理,自动化的完成维护,减轻管理员的负担.

不说不知道,一说吓一跳呀,在工作中经常写一些脚本,就是为了方便。

shell独立于内核,它是链接内核和应用程序的桥梁。内核是linux系统的心脏,从开机自检就驻扎在计算机内存中,直到计算机关闭为止。用户的应用程序存储在计算机硬盘上,仅当需要时才被调入内存。shell是一种应用程序,当用户登陆linux系统时,shell就会被调用到内存执行。

不登录怎么执行呢,好像听说过有nologin 的一种模式

linux的shell脚本是一种特殊的应用程序,常见的shell解释器有很多种使用不同的shell时期内部指令命令提示方式方面会存在一些区别,可以通过/etc/shells文件查看

就是不同命令之间有不同的显示和操作

/bin/bash 是大多数linux中默认的shell解释器。

还有chsh不过不经常用,我们一般都是写bash,头文件中添加#!/bin/bash的标志

如何编写*个Shell脚本(shell 就是命令的集合)

其实就是命令的集合,唯一的区别使shell脚本我们可以优化,加入一些for循环,if条件语句。

linux不以后缀名区分文件,为了方便记忆这里我就以.sh为结尾

编写一个shell

1 [support@CMS01 wdq]$ vim first.sh#!/bin/bash
2 #!/bin/bash
3 #auto my frist scripts
4 #by authors cd
5 echo “hello world”
6 mkdir /home/support/tmp/wdq/test
7 free -m

注释:
#!/bin/bash 主要是为了声明,我所写的均为bash语言(我是用的是bash解释器)[定义我的脚本是shell脚本].{固定格式}
#! 称为sha-bang符号,是shell脚本的起始符,他告诉linux系统这个文件的执行需要指定一个解释器。

ll查看是都有权限

1 [support@CMS01 wdq]$ ll
2 total 8
3 -rw-rw-r– 1 support support 1388 May 9 19:51 backupLogs.sh
4 -rw-rw-r– 1 support support 96 Jul 2 17:16 first.sh
5 [support@CMS01 wdq]$ chmod u+x first.sh
6 #赋执行权限

在执行标准/bin/bash/+脚本来执行,这样的就不需要加权限了。
执行权限的不同方式

1 *种使用*对路径执行
2 第二种使用相对路径执行,如./的方式
3 第三种使用 sh命令来执行 格式 sh 脚本名 不需要执行权限
4 第四种使用 . (空格)脚本名称的方式执行 不需要执行权限 . a.sh
5 第五种使用 source 脚本名称 不需要执行权限(主要用于生效配置文件)
6 建议使用后三种,在生产环境中不要轻易的给文件可执行权限;

2.linux中有哪些shell?

一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的,但是*常用的shell还是/bin/bash。下面的演示也基于/bin/bash

1  [robot@hadoop103 ~]$ cat /etc/shells
2  /bin/sh
3  /bin/bash
4  /sbin/nologin
5  /usr/bin/sh
6  /usr/bin/bash
7  /usr/sbin/nologin
8  /bin/tcsh
9  /bin/csh

1  sh(全称 Bourne Shell): 是UNIX*初使用的 shell,而且在每种 UNIX 上都可以使用。
2  Bourne Shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种 shell。
3  bash shell(全称 Bourne Again Shell): LinuxOS 默认的,它是 Bourne Shell 的扩展。
4  与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基础上增加了很多特性。可以提供命令补全,命令编辑和命令历史等功能。
5  它还包含了很多 C Shell 和 Korn Shell 中的优点,有灵活和强大的编辑接口,同时又很友好的用户界面。

3.演示一个demo

一个简单的shell实例(用shell脚本语言启动tomcat)
#!/bin/sh
cd /usr/local/apache-tomcat-5.5.23/bin/
./catalina.sh start
文件取名为tomcat
说明
这个脚本只有三行,它的*行指明这个脚本程序由那个程序来解释。
第二行只有一个简单的动作进入某个目录,第三行调用catalina.sh脚本启动tomcat。
执行脚本
执行脚本前先赋予tomcat脚本可执行权限,命令如下:chmod +x tomcat ,
否则会出现如下错误:-bash: ./tomcat: Permission denied #当然如果直接用sh tomcat执行,不需要u+x赋予执行权限
假设tomcat脚本所在目录为为/home/amy/
在/home/amy/目录下执行脚本: ./tomcat
在别的目录下执行脚本: /home/amy/tomcat

4.Shell编程模型

%title插图%num

5.Shell基本的执行方式

1  首先要赋予+x权限,赋予脚本执行权限
2  *种:输入脚本的*对路径或相对路径
3    /root/helloWorld.sh
4    ./helloWorld.sh
5  或者,不用赋予+x权限,而用解释器解释执行u+x
6  第二种:bash或sh +脚本
7    sh /root/helloWorld.sh
8    sh helloWorld.sh
9  第三种:在脚本的路径前再加”. ”
10    . /root/helloWorld.sh
11    . ./helloWorld.sh #注意这里两个点。当然加一个点也可以执行,属于*种
12  区别:*种和第二种会新开一个bash,不同bash中的变量无法共享