Linux Shell 编程基础详解——吐血整理,墙裂推荐!

第一部分:Linux Shell 简介

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
当一个用户登陆linux 系统后,系统就会为该用户创建一个shell程序。
Shell的版本:

Bourne Shell:是贝尔实验室开发的,unix普遍使用的shell,在编程方面比较优秀,但在用户交互方面没有其他shell优秀。

BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,在bourne shell基础上增强了很多特性,如命令补全,命令历史表等等

Korn Shell:是对Bourne Shell 的发展,在大部分内容上与Bourne Shell兼容,集成了C Shell和Bourne shell优点。

C Shell:是SUN公司Shell的BSD版本,语法与c语言相似,比bourne shell 更适合编程

第二部分 Shell 程序设计基础 2.1 Shell 输入输出 2.1.1 echo

echo命令可以显示文本行或变量取值,或者把字符串输入到文件中
格式: echo string
echo的常用功能:\c 不换行 \f 不进纸 \t 跳格 \n 换行

note:
对于linux系统,必须使用-e选项来使以上转义符生效

例:

$ echo -e "hello\tboy" hello boy

echo命令对特殊字符敏感,如果要输出特殊字符,需要用\屏蔽其特殊含义。
常用的特殊字符:双引号"" 反引号`` 反斜线\
例:

$ echo "\"\"" //想输出"" "" 2.1.2 read

read命令从键盘或者文件的某一行文本中读入信息,并将其赋给一个变量。
如果只指定了一个变量,read会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车
格式: read var1 var2 …
例1:

chenshifengdeMacBook-Pro:~ chenshifeng$ read name Hello I am superman chenshifengdeMacBook-Pro:~ chenshifeng$ echo $name Hello I am superman

如果输入的值个数多于变量个数,多余的值会赋给最后一个变量:
例2:

chenshifengdeMacBook-Pro:~ chenshifeng$ read name surname John Mike Kate chenshifengdeMacBook-Pro:~ chenshifeng$ echo $surname Mike Kate chenshifengdeMacBook-Pro:~ chenshifeng$ 2.1.3 cat

cat可以用来显示文件,并且支持将多个文件串连接后输出

note:该命令一次显示完整个文件,若想分页查看,需使用more

格式: cat [ options ] filename1 … filename2 …
常用options:

-v 显示控制字符

-n 对所有输出行进行编号

-b 与-n相似,但空白行不编号

例:

$ cat file1 file2 file3 // 同时显示三个文件 $ cat –b file1 file2 file3 2.1.4 管道 |

可以通过管道把一个命令的输出传递给另外一个命令做为输入
格式: 命令1 | 命令2
例:

$ cat test.txt | grep 'hello' 2.1.5 tee

把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中
如果想看到输出的同时,把输出也同时拷入一个文件,这个命令很合适
格式: tee -a file

-a 表示文件追加到末尾

file 表示保存输出信息的文件

tee命令一般和管道符|结合起来使用
例:

$ who | tee who.info // 该命令的信息返回在屏幕上,同时保存在文件who.info中 $ who | tee who.info chenshifeng console Jan 9 12:56 chenshifeng ttys000 Jan 9 13:27 chenshifeng ttys004 Jan 9 19:11 chenshifeng ttys005 Jan 10 00:12 $ cat who.info chenshifeng console Jan 9 12:56 chenshifeng ttys000 Jan 9 13:27 chenshifeng ttys004 Jan 9 19:11 chenshifeng ttys005 Jan 10 00:12 2.1.6 标准输入,输出和错误

当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件,见下表

文件 文件描述符
输入文件-标准输入   0  
输出文件-标准输出   1  
错误输出文件-标准错误   2  

系统中实际上有12个描述符,可以任意使用文件描述符3-9
标准输入 对应文件描述符0,是命令的输入,缺省键盘
标准输出 对应文件描述符1,是命令的输出,缺省屏幕或文件
标准错误 对应文件描述符2,是命令错误的输出,缺省屏幕或文件
利用文件重定向功能对命令的标准输入,输出和错误进行修改。
常用文件重定向命令:

command > file: 标准输出重定向到一个文件,错误仍然输出屏幕 command >> file: 标准输出重定向到一个文件(追加) command 1> file: 标准输出重定向到一个文件 command 2> >file: 标准错误重定向到一个文件(追加) command >file 2>&1: 标准输出和标准错误一起重定向到一个文件 command >>file 2>&1: 标准输出和标准错误一起重定向到一个文件(追加) command < file1 >file2: 以file1做为标准输入,file2做为标准输出 command <file: 以file做为文件标准输入  

结合使用标准输出和标准错误

$ cat hello 1>myfile.out 2>myerror.out

合并标准输出和标准错误

$ cat >>mylog.out 2>&1 <hello 2.2 Shell 后台执行命令 2.21 cron

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydzpj.html