Linux Shell基础知识

Shell基础知识

参考书籍:Ubuntu Linux 基础教程.王宏勇主编.清华大学出版社

基本概念

Shell是什么

Shell 是联系用户操作系统的命令解释器,或者称为命令行用户接口。它随时接受用户输入的命令,并把这些命令翻译成内核能够识别的形式,传递给内核,来完成用户和内核之间的沟通。

从操作系统角度来看,Shell是操作系统的最外层,负责管理用户和操作系统之间的交互。它等待用户的输入,并负责向操作系统解释用户的输入,当操作系统进行结果输出时,它再负责处理输出的结果。

Shell一般默认使用bash版本(bash是一种Shell的版本,或者说bash是一种命令行编辑器的版本),查看当前Ubuntu系统中支持哪些Shell类型:cat /etc/shells

Shell的操作

自动补齐

  • 单击Tab自动补齐,多次单击Tab可切换所有满足条件选项
  • 双击Tab一次性列出所有满足条件的命令

特殊字符

  1. 文件通配符

    \* : 匹配所有字符串,包括空串

    ? : 匹配单个字符

    [] : 匹配括号中列出的单个字符

    [字符1,字符2,...] : 匹配括号中列出的多个字符,字符间用逗号分隔

    [开始字符-结束字符]: 匹配括号中的多个字符,方括号中字符表示字符范围

    [!字符]:指定不匹配的字符

    例如:

    file* 表示匹配以file开头的所有文件名字符串

    fil?.exe 表示匹配以fil字符开头,且以.exe结尾的,中间为任何字符的文件名字符串

    *[!e] 表示匹配不以e结尾的文件名字符串

    [a-c]* 表示匹配开头字符串范围从a~c的所有文件名字符串,例如包括a.exe, abc.c, b.dat, cat.o等

  2. 输入输出重定向与管道符

    < 标准输入重定向,从文件中输入数据

    > 标准输出重定向,向文件输出数据

    例如:cat >temp1执行后,所有键盘输入都会输入到文件中,文件编写完成后用CRTL+D退出。

    &> 标准输出合并重定向, 将标准输出与标准错误输出合并重定向到一个文件中

    >> 标准输出追加重定向,将标准输出或标准错误用追加的方式重定向到一个文件中

    | 管道符,将前一个命令的标准输出作为后一个命令的标准输入

  3. 命令执行控制符

    命令执行控制符号是在命令执行时,指示命令的执行实际和执行处。

    命令的顺序执行符号,在一个命令行中可以使用多个”;“将多个命令连写在一起

    && 表示逻辑与,指示Shell执行一行中的多个命令,直到某个命令失败为止

    || 表示逻辑或,指示Shell执行一行中的多个命令,直到某个命令成功为止

    & 后台执行符号,指示Shell将命令放在后台执行

  4. 命令替换符

    "" 双引号,在字符串含有空格时,用双引号把字符括起来,再进行赋值

    ' ' 单引号,将括号括起来,阻止Shell解析变量

    `` 单撇反引号,把执行的命令存放在变量中

  5. 元字符

    # 注释符号

    $ 变量引用符,访问变量的值

    空格是分隔符,用来分隔命令名、参数、选项等

  6. 转义符

    \ 消除后面单个字符的特殊含义

Shell变量

变量种类

环境变量:系统预定义的一组变量,用于为Shell提供有关运行环境的信息,Shell一旦启动这些变量便可使用,环境变量的作用域是整个环境。环境变量定义在Shell的配置文件中,用户可以对环境变量进行修改或重置。

内部变量:由Shell定义的一组变量,由系统提供,用户可以使用但是不可以修改。一般是用于记录当前Shell运行状态的一组信息,例如进程号等。

用户变量:用户在Shell运行过程中定义的,允许用户进行修改。

使用不带参数和选项的set命令可以显示Shell的所有变量,但不包括内部变量。

变量作用域

本地变量:也称局部变量,如果Shell中定义的变量作用域是局部的,则仅限于本Shell,在子Shell中是不存在和不能使用的。用户变量、环境变量和内部变量都属于局部变量。

导出变量:如果想本地变量的作用域扩大,在它的子进程中也可使用该变量,则需要把该变量进行”导出“操作,使之成为导出变量。导出变量的格式为:

export 变量名 [变量名…]

变量的定义和使用

  1. 用户变量

    变量名以字母、数字、下划线序列组成,且不能以数字开头,必须用字母或下划线开头

    • 定义:变量名=字符串 注意等号前后不能有空格
    • 访问:$name 用变量引用符访问变量
    • 取消:unset 变量名

    可用echo变量显示变量的值

  2. 系统变量

    变量含义
    $0当前Shell程序名称
    $#传送给Shell程序的未知参数的数量
    $*调用Shell程序时传送的全部参数组成的单字符串
    $?前一个命令或函数的返回值
    $$本程序的PID(进程ID)
    $!上一个命令的PID
  3. 环境变量

    Shell的环境变量就是所有与Shell程序都会接受的参数,在Shell开始运行时就已经定义了一些和系统的工作环境有关的变量。

    环境变量可由用户自定义,一般用大写字母表示。

    变量含义
    HOME用于保存注册目录的全部路径名
    PATH命令执行时所搜寻的路径,Shell将按照该路径搜索,找到第一个匹配的文件执行
    UID当前用户的标识号(ID),值为数字构成的字符串
    PWD当前工作目录的绝对路径名
    PS1主提示符,root用户的提示符为#,普通用户的提示符为$
    TERM用户终端的类型

    说明:

    • $PWD访问当前工作目录绝对路径十分有用,可用于Shell脚本中自动执行程序。

    • 有时用户所处的位置就是可执行文件所在的目录,但是却无法执行可执行文件,这是由于PATH中没有保存可执行文件的路径,此时可用./myfile.exe命令,这样就可以正常运行了。

    • 查看系统中所有的环境变量:env

  4. 变量的数值运算

    Shell默认的变量类型是字符类型,如果希望对其进行数字运算,需要额外声明。

    方法一

    declare -i [num=20]
    

    注意只能定义整型数字,等号前后不能有空格。

    方法二

    expr 4 - 2
    

    注意运算符前后必须有空格,如果运算符是Shell的元字符,则必须先使用转义字符让其取消特殊含义(转义符转义时不加空格)

命令别名和历史命令

Linux支持用简单的命令别名代替长命令。

变量别名的设置

注意,如果在Shell窗口直接执行命令1-3,所设置的别名仅在本Shell中有效,退出后无效。

  1. 命名

    alias 别名="原命令"
    

    注意等号两边没有空格!

  2. 查看

    alias
    
  3. 取消

    unalias 别名
    
  4. 设置变量别名永久有效

    gedit ~/.bashrc
    

    .bashrc文件的最后一行添加变量别名:

    # [virtual environment name]
    alias VEgeom="source /home/isaac/Desktop/virtualEnvironment/geometry.env/bin/activate"
    

    实际使用时,替换VEgeom为自定义的变量别名,等号右侧的命令或路径为实际需要的命令或路径。

历史命令

  1. 使用键盘上下箭头

  2. 使用history命令

    清除当前Shell的命令历史:

    history -c
    

    列出前n条命令:

    history n
    

Shell编程基础

Shell script为一种解释性脚本语言,源程序无需在执行前转为计算机代码,只需要在每次执行时进行代码转换,一边转换代码一边执行。

#表示注释,echo 变量名/字符串用以显示,date用来显示系统当前的日期和时间。

编辑和执行Shell脚本

Shell文件没有特别的后缀名,可以通过文本编辑器直接编辑,一般不能直接被执行,可使用下面三种方法执行:

  1. 赋予脚本可执行权限

    • 在图形界面修改权限为:允许作为程序执行
    • 在Shell界面使用命令:chmod a+x 文件名chmod 775 文件名

    修改完成后,如果脚本文件在PATH的搜索路径下,可以直接输入文件名运行;如果不在PATH的搜索路径下,使用./文件名运行脚本。

  2. 用对应Shell版本的解释器运行(默认为bash)

    bash 文件名
    
  3. 使用Shell内部命令运行脚本

    .source是Shell的命令,其操作参数为文件名,这两个命令的功能是读取参数指定的文件,执行它的内容。

    . 文件名
    

    source 文件名
    

    注意:.和文件名之间存在空格。

交互式Shell脚本

Shell脚本允许交互式运行,在运行中读取用户输入的变量值。

read [-p "提示字符串"] 变量名

逻辑判断表达式

test命令可对表达式执行结果进行判断,表达式包括文件、整数、字符串,执行判断后用返回值表示判断结果,返回值为0表示判断结果为真,返回值为1表示判断结果为假。

test 表达式 或者 [ 表达式 ]

注意方括号和表达式之间要有空格;表达式中的运算符两侧也要有空格;如果运算符是元字符,需要转义。

程序结构、函数和调试

Shell脚本还支持分支结构、循环结构,定义函数等,详见参考文献。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值