Shell基础之概述
一、Shell介绍
Shell是指操作系统的用户界面,提供了一种与内核进行交互的方式,也被称为命令解释器。Shell可以让用户通过命令行或脚本来启动、挂起、停止等操作系统级别的程序,也能够进行文件操作、文本处理、调用其他程序等多种操作。通常情况下,Shell是由C语言编写的应用程序,它和命令行交互、解释命令并执行相应的操作。
Shell通常包含两个部分:命令提示符和命令行解释器。
- 命令提示符是Shell给出的提示,例如"$“、”%"等,用于提示用户可以输入命令了。
- 命令行解释器则负责读取用户输入的命令,并且将其转换为可执行的操作系统命令。
二、Shell分类
在大多数Unix/Linux系统中,比较常用的是:Bourne Shell(sh)和C Shell(csh)。
- Bourne Shell(sh):由Steve Bourne开发,是最早的Unix Shell,其语法简单,功能基本,但灵活性较差。Bourne Shell在Linux下是BASH。Bourne家族主要包括sh、ksh、Bash、psh、zsh;
- C Shell(csh):由Bill Joy开发,支持类似C语言的流程控制语句、命令历史和命令行编辑等高级功能,但缺点是执行效率较低。C Shell在Linux下是TCSH。C家族主要包括csh、tcsh;
注:Bash与sh兼容,现在主流的Linux就是使用Bash作为用户的基本Shell。
三、Linux支持的Shell
可以通过/etc/shells文件查看,该文件包含了可用的登录Shell的完整路径名。该文件中列出的Shell可以用于用户登录系统时作为默认Shell。一般如下:
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/usr/bin/tmux
/usr/bin/screen
注:一些程序还会查看这个文件以确定用户是否是正常用户。例如,在某些情况下,一些FTP服务器会拒绝那些使用非标准Shell的用户进行访问。
四、Shell脚本的执行方式
1、echo命令
介绍Shell脚本之前,我们先要了解一个输出命令:echo
,这个命令可将字符串输出到标准输出中,在 shell 脚本中通常用于显示消息或输出其他命令的结果。在 Linux/Unix 系统中,echo 是 Bash 和其他大多数流行的 shell(如 Zsh 和 Ksh)中的一个内置程序。
echo 命令的语法:echo [选项] [输出内容]
。echo命令最常用的选项为-e,该选项用于支持反斜线控制的字符转换。这意味着在使用 echo 命令时,任何以反斜杠(\\)开头的特殊字符都将被视为转义字符并进行相应的解释。
控制字符 | 作用 |
---|---|
\\a | 警告(响铃)符,可以用来在终端中发出警告声或响铃声。 |
\\b | 退格符,将当前输出位置前移一个字符,可以用来删除一个字符。 |
\\c | 用于在输出中取消行末的换行符,使得输出内容在同一行显示。 |
\\e | 逃脱符,可以用来在终端中设置光标颜色、背景色等特殊效果。 |
\\f | 换页符,将当前输出位置移到下一页开头。 |
\\n | 换行符,将当前输出位置移到下一行开头。 |
\\r | 回车符,将当前输出位置移到本行开头。 |
\\t | 水平制表符,将当前输出位置移到下一个制表符位置。 |
\\v | 垂直制表符,将当前输出位置移到下一垂直制表符位置。 |
\\0nnn | 表示八进制数码,其中 nnn 是一个三位数的八进制数,用于表示 ASCII 码表示的一个字符。 |
\\xhh | 表示十六进制数码,其中 hh 是一个两位数的十六进制数,用于表示 ASCII 码表示的一个字符。 |
结合例子说明:
echo -e "\\ahello"
,输出hello
,并且会发出一声警告。echo -e "Countdown: 3\\b2\\b1\\bBlast off!"
,输出Countdown: Blast off!
。echo -e "Name:\\tzheng"
,输出Name: zheng
。echo -e "zheng1\\rzheng2"
,输出zheng2
。echo -e "The ASCII code of @ is \\064."
,输出The ASCII code of @ is 4.
。echo -e "The ASCII code of a is \\x61."
,输出The ASCII code of a is a.
。
2、第一个脚本-hello.sh
hello.sh
#!/bin/bash
#zhenghaojieecho "Mr. zheng is the most kind man in xinhua school"
关于#!/bin/bash
:
- #!/bin/bash 是指定脚本使用的解释器。在 Linux 或 Unix 系统中,当运行一个脚本文件时,系统会根据文件的第一行判断所需的解释器类型。
- 其中 #! 符号是特殊的注释符号,它告诉系统这个脚本需要用什么命令来解释执行。如果你使用其他的 shell,可以将 /bin/bash 修改成对应的解释器路径。
- #!/bin/bash 必须出现在脚本文件的第一行,否则系统无法正确解释该脚本文件。
3、脚本执行
(1)赋予脚本执行权限,直接执行,如下:
chmod 755 hello.sh //将 hello.sh 文件的权限设置为 -rwxrwxr-x
./hello.sh
(2)通过bash命令执行,则不需要赋予执行权限,如下:
bash hello.sh
注:使用cat -A hello.sh
,会发现在Linux中编辑文件时回车符表示为$
,而在window中编辑文件时回车符表示为^M$
。因此,当在window中编辑脚本后直接在Linux中执行会报/bin/bash^M:bad interpreter:没有那个文件或目录
错误,我们可以通过dos2unix
工具或fromdos
工具转换格式后再执行。当然也有unix2dos
与todos
将unix格式转为dos格式在window中执行。