首先什么是shell:
讲到shell就要讲到计算机的组成。计算机是由系统软件和应用软件组成的。而我们常用的软件大部分是属于应用软件的,我们使用的应用软件是通过将我们操作的命令传给shell,shell通过控制计算机的硬件来实现资源使用和调配的,shell更像是连接我们使用和计算机的纽带。
Shell是分类型的,通常可以在/etc/shells中参看当前使用的Linux支持那种类型,常见的类型包括:
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
其中我们常用的是/bin/bash
由于shell属于一种解释性语言,这就要求我们在使用shell时,需要使用脚本。在写shell脚本时需要在首行加入#!/bin/bash用来表明接下来写的脚本使用的是shell,需要用shell解释器进行编译。
因为我们在写shell脚本时,更像是写一个文件,将需要操作的命令和要启动的服务等写入文本,这就需要我们大量使用非交互命令,
对于交互命令,由于需要进行交互输入。这就需要我们在写脚本时要讲交互命令及服务转变成非交互命令,或者用起来非交互命令进行替代。
对于shell脚本来说,echo是一个很特殊的命令,我们在使用shell脚本时,往往需要将我们写的脚本内容进行输出,或者需要将文本中的某些输出写入到其他文件中,这就需要使用echo命令。echo命令中的-e选项也是常用的,echo -e可以支持控制字符:
\\ | 输出\本身,\第一个表示转义符,取消命令特殊含义 |
\a | 输出警告音 [root@localhost ~]# echo -e "\a" |
\b | 退格键,也就是向左删除 |
\f | 换页符 |
控制字符 | 作用 |
\n | 换行符 |
\t | 制表符(TAB键) |
Shell脚本一共三种执行方式:①:绝对路径或相对路径,需要可执行权限。(子shell中执行);②:. 执行或者source执行(两者相同),不需要可执行权限。(在当前shell中执行);③:bash,使用bash解释器启动,不需要可执行权限。(子shell中执行)。
这里解释下父shell和子shell:当我们进入到Linux中时,会默认有一个shell,称为父shell,我们执行的命令大都是使用的父shell,我们在父shell中设定的变量等条件会在新建子shell时传给新shell,但是我们在子shell中的设定不会传给父shell,这也是我们通常所说的传子不传父。通常我们使用(命令)执行的命令实在子shell中,在{ 命令 ; }执行的命令时在父shell中。
在bash中是有一些特殊符号的:
其中``这个是单反号,不是单引号,当使用英文输入时,使用~按键可以输入,这个符号的作用和$()时完全相同的。因此,我们在使用时为了避免使用错误,多使用$()来替代``来是使用。