linux shell(2)

一、什么是Linux Shell?

  概念:Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。是在Linux内核与用户之间的解释器程序,现在Linux通常指/bin/bash解释器来负责向内核翻译以及传达用户/程序指令,shell相当于操作系统的“外壳”

二、Shell的使用方式

  • 交互式---命令行

  --人工干预。智能化程度高
  --逐条解释执行,效率底

  • 非交互式---脚本

  需要提前设计,智能化难度大
  批量执行,效率高
  方便在后台静悄悄地运行

三、bash的基本功能

3.1历史命令

linux可以使用history命令查看历史命令,历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中修改(HISTSIZE属性)
history命令使用方法:
history  选项  文件名

-c  清空历史命令
 -w  将缓存中的历史命令写入文件中
 上下箭头键  查看以前的命令
 !n  重复执行第n条命令
 !!  重复执行上一条命令
 ! 字符串  重复执行最后一条以该字符串开头的命令

3.2命令补全

使用tab键可以补全命令或文件名

命令别名

命令别名就是为一条命令定义一个命令名,执行这个新的命令名就相当于执行这条命令。
与命令别名相关的命令
alias  设置命令别名
unalias  取消命令别名

3.3管道

管道符“|”在用于将linux命令行前一个命令的输出作为后一个命令的输入

3.4输入输出重定向

重定向命令列表如下:

命令说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)

3.5命令行编辑

3.6命令行展开

3.7通配符

通配符   作用
匹配任意单个字符
*  匹配0个或多个任意字符,也就是可以匹配任何内容
[]   匹配中括号中任意一个字符,例如:[abc] 代表一定匹配一个字符,
或者是a,或者是b,或者是c.
[m-n] 匹配中括号中任意一个字符,- 代表一个范围。例如:[a-z]代表
 匹配一个小写字母
[^]  逻辑非,表示匹配不上中括号内的一个字符,例如:[^0-9]代表
 匹配一个不上数字的字符。

Bash中其它特殊符号

符号 作用
'' 单引号;在单引号中所有的特殊符号,如"$"和“ · ”(反引号)都没有特殊含义
"" 双引号;在双引号中特殊符号都没有特殊含义,但是“$”和“ · ” 和“ ”是例外,
拥有“调用变量的值”、“”引用命令“和”转义符“的特殊含义
`` 反引号;反引号括起来的命令是系统命令,在Bash中会先执行它。和$()作用一样,
不过推荐使用$(),因为反引号非常容易看错。
$() 和反引号命令一样,用来引用系统命令
# 在Shell脚本中,#开头的行代表注释
$ 用于调用变量的值,如需要调用变量name的值时,需要使用$name的方式得到变量的值。
转义符,跟在 之后的特殊符号将失去特殊含义,变为普通字符。如$将输出”$“符号,而不是
当做是变量引用

3.8  Bash变量和环境配置文件

3.8.1  Bash变量分类

1)用户自定义变量:只在当前的shell生效
2)环境变量:主要保存的是和系统操作环境相关的数据
3)位置参数变量:主要用来向脚本当中传递参数或数据,变量名不能自定义,变量作用书固定的
4)预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的

3.8.2  Bash变量定义规则

1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头
2)在Bash中,变量的默认类型都是字符串型,如果需要进行数值计算,则必须指定变量类型为数值型
3)变量用等号连接值,等号左右两侧不能有空格
4)变量的值如果有空格,需要使用单引号或双引号包括
5)在变量的值中,可以使用“”转义符
6)如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要使用双引号包含“$变量名”或用${变量名}包含
7)如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
8)环境变量名建议大写,便于区分

3.8.3  Bash变量定义方法

  • 本地变量

             变量名= 变量值

  • 环境变量
        export   变量名=变量值 

3.8.4  查看与添加系统变量

1)系统查找命令路径
echo $PATH
2)PATH变量叠加
PATH=”$PATH”:/root/sh

3.8.5  环境变量的配置文件

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.

并从/etc/profile.d目录的配置文件中搜集shell的设置. 

/etc/bashrc:为每一个运行bashshell的用户执行此文件.当bash shell被打开时,该文件被读取. 

~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该 

文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件. 

~/.bashrc:该文件包含专用于你的bashshell的bash信息,当登录时以及每次打开新的shell时,该 

该文件被读取. 

~/.bash_logout:当每次退出系统(退出bashshell)时,执行该文件. 

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系. 

~/.bash_profile是交互式、login 方式进入 bash 运行的 

~/.bashrc是交互式 non-login 方式进入 bash 运行的 

通常二者设置大致相同,所以通常前者会调用后者。 

.bash_profile文件在通过控制台(或远程登录, 比如ssh)登录(login)系统的时候被执行的shell脚本. 

而 .bashrc则是在打开虚拟终端的时候才会起作用,比如在GNOME,KDE中执行rxvt.

通俗的理解

~/.bash_profile是交互式、login 方式进入 bash 运行的 

~/.bashrc是交互式 non-login 方式进入 bash 运行的 

3.9编程

原文地址:https://www.cnblogs.com/kumunotes/p/10940415.html