Linux Shell编程基础

1:Shell的定义

Shell是一种特殊的程序,它是用户与UNIX/Linux系统内核之间的接口。 
它介于操作系统内核与用户之间,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行。
内核在系统启动时载入内存,管理系统直至关机。内核负责创建和控制进程管理内存文件系统和通信等。内核以外的所有其他程序都保存在磁盘上
Shell在用户登录后启动,它解释并运行由命令行或脚本文件输入的命令,从而实现用户与内核之间的交互

2:交互式Shell 

当用户登录系统后,系统会启动一个交互式的shell来提示用户输入命令,用户输入命令后,
    shell开始执行任务:先解析命令行,然后查找命令,找到后开始执行
例如:
  在Linux Terminal中直接输入Linux命令,如果需要在一行中输入多个命令,那么这些命令之间需要用分号分隔,如下所示:

3:Shell 脚本 

Shell脚本,跟批处理文件很相似,都是把一组Linux命令输入到文件中,然后执行该文件,
  更复杂的脚本还包括用于实现判断、循环、文件测试等功能的程序结构。
使用vim创建一个文件,文件名为test.sh
vim test.sh
test.sh脚本内容如下:
给test.sh赋予执行权限并执行该shell脚本:chmod u+x test.sh
./test.sh:执行shell脚本

 4:Shell的类型 

UNIX系统支持的主流shell包括:
  Bourne shell 、C shell 和 korn shell Bourne shell 是标准的UNIX shell,由AT&T 开发,以简练、紧凑和快速著称; C shell由美国加州大学Berkeley分校开发;在bourne shell基础上增加了新功能;
Korn shell 是AT
&T开发,它是Bourne shell的一个扩展集,拥有比C shell更多的功能;
Linux上默认的shell是GNU bash,是一种增强的Bourne shell。 要知道所使用的Linux系统上面有哪些类型的shell,可以查看
/etc/shells文
  如下图:
要知道所使用的Linux系统当前使用的是哪一种shell,可以运行下列命令: echo $SHELL  如下图:

5:Bash历史命令功能

命令历史是Bash中用于提高命令输入效率的一项功能,能够让用户快速地重复执行已经输入过的命令

使用历史命令:
  用户执行完命令以后,按“↑”键时,会在当前命令行自动出现上一条执行的命令内容,配合“↓”键可以反复在历史命令记录中查询。
  在命令行中输入“!”,再输入已经执行过的命令的开头几个字母,回车后可以执行最近一次以这几个字母开头的命令。 
查看历史命令列表 :history
    history命令可以显示当前用户的历史命令列表(默认保存在“~/.bash_history”中)
  在命令行中输入“!”后再输入从history命令显示结果中获得的命令序号,也可以再次执行指定命令序号的命令

 

 如上图: !5  相当于执行ll

设置记录历史命令的条数:
  Bash环境中默认情况下可以为用户保存最多1000条历史命令,若需要调整所有用户的历史命令条数的限制,
    可以通过更改 “/etc/profile” 文件中的 “HISTSIZE=1000” 实现配置。用户重新登录后设置生效。

  若只需要调整特定用户的历史命令条数,则可以修改该用户主目录中的“.bash_profile”文件,
    添加“export HISTSIZE=100”形式的配置记录,该记录会覆盖“/etc/profile”文件中的设置。需要用户重新登录后生效。 
清除命令历史:
  history –c 

6:命令别名功能   alias

命令别名功能可以将频繁使用的复杂命令定义为简短的别名,当用户需要执行该复杂命令时,只需要使用别名即可完成对应的操作。 
查看已设置的别名: 
  alias
设置命令别名:
  alias 别名='实际命令'
取消已设置的别名: 
    unalias 别名 
取消所有已设置的别名:
    unalias –a 

7:标准输入输出 

标准输入(STDIN):
    默认的设备是键盘,设备文件位于/dev/stdin,文件编号为0,命令从标准输入文件中读取在执行过程中需要的输入数据 
标准输出(STDOUT):
    默认的设备是显示器,设备文件位于/dev/stdout,文件编号为1,命令将执行后的输出结果发送到标准输出文件 
标准错误(STRERR):
    默认的设备是显示器,设备文件位于/dev/stderr,文件编号为2,命令将执行时的错误信息发送到标准错误文件 

8:重定向  >:清空重定向  >>:追加重定向

在实际Linux操作过程中,也可以变更输入输出内容的方向,而不使用默认的标准输入输出设备,这种操作称为重定向
标准输出重定向:  >  >>命令的输出结果定向(保存)到指定的文件中。输出重定向使用 “>” 或 “>>” 操作符
  “>”:重定向符后面指定的文件如果不存在,则会新建该文件,并将命令执行结果保存到该文件中;若该文件已经存在,则将清空文件内容并保存命令的执行结果到文件中 
  “>>”:
重定向符可以将命令执行的结果追加到指定文件的末尾进行保存,而并不覆盖文件中的所有内容
标准输入重定向:  <
  将使一些交互式的操作过程可以通过读取文件来完成。标准输入重定向使用“<”操作符
  read相当于定义一个变量name
标准错误重定向: 2>  2>>
  将执行命令的过程中出现的错误信息重定向(保存)到指定的文件中。标准错误重定向需要使用“2>” “2>>” 操作符
  使用 “2>” 操作符时,会像 “>” 一样覆盖指定文件中的内容,若需要追加到新的内容到同一个文件中,需要使用 “2>>” 重定向操作符 
“&>”操作符可以将 标准输出错误输出 的内容,同时重定向的同一个文件中 

9:管道  |

在Bash环境中,管道操作为不同命令之间的协同工作提供了一种机制。位于管道符 “|” 左侧的命令输出的结果,会作为右侧命令的输入
例1:统计/etc/passwd文件有多少行          cat /etc/passwd|wc -l    
例2:在/etc/passwd文件中找出包含root的行      cat /etc/passwd|grep root|wc -l
                            grep root /etc/passwd  本来这样使用的

 10:编写shell脚本 

使用vi等文本编辑工具,创建脚本文件,文件名可以使用扩展名(.sh),也可以不使用扩展名。脚本中需要包含如下内容:
  运行环境设置:  
    通常位于文件的第一行,用于指定使用哪一个Shell程序进行解释。如由Bash进行解释的Shell脚本中第一行为:“#!/bin/bash” 
  注释行:  #
    在脚本文件中,除了以 “#!” 开头的Shell环境设置行以外,其他以 “#” 开头的内容将被视为注释信息,执行脚本时将予以忽略
  可执行语句:
    Shell脚本程序中最重要的组成部分,在命令行操作界面中可以执行的命令都可以写入到脚本中,程序运行时默认情况按照顺序依次执行。
  为脚本文件添加可执行权限:
    新创建的脚本文件通常不具有可执行属性,因此需要使用 chmod 命令为文件添加“x”权限。
例一:

11:执行shell脚本 

直接执行带“x”权限的脚本文件:  ./文件名 
  在Shell命令行中可以直接通过脚本文件的路径执行脚本程序。执行当前目录下的脚本文件,需要在文件名前加入“./”路径。
  ./test.sh
用Shell解释器程序执行脚本:  bash 文件名 
  由解释器程序负责读取脚本文件中的内容并执行,因此并不需要脚本文件具有“x”权限
  bash test.sh 1 2 3
使用“.”或source命令执行环境变量文件,重新导入环境变量
  source /etc/profile 

 12:Shell启动

如果登录shell是bash shell,在显示提示符之前,会先运行一组进程
如下图:
  系统启动后运行的第一个进程是init,init创建getty进程,
    getty进程负责打开终端端口,提供标准输入、标准输出与标准错误输出,并且在屏幕上显示一个登陆提示符 
  接着执行的是/bin/login程序,login程序依次执行下面工作: 
    提示用户输入用户名,密码; 
    设置初始环境、启动用户的登陆shell(登陆shell是paswd文件的最后一项,即/bin/bash
  Bash进程首先查找系统文件/etc/profile,并且执行其中的命令; 
  然后在用户的主目录中查找文件.bash_profile; 
  执行完.bash_profile中的命令后,bash shell接着执行用户的.bashrc文件,最后默认的提示符$将出现在屏幕上面,等待用户输入命令 

 

posted @ 2022-04-29 19:18  至高无上10086  阅读(111)  评论(0编辑  收藏  举报