常见的shell解释器
Linux系统中的Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当一个”命令解释器“的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出结果。 它是用户使用 Linux 的桥梁。
Shell 既是一种命令语言,又是一种程序设计语言。
常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shell 文件可以了解当前系统所支持的 Shell 脚本种类。
查看本机的shell信息
linux中常见的shell
bash:基于GUN的框架下发展的shell(是目前大多数 Linux 版本采用的默认 shell。) csh:类似C语言的shell tcsh:整合了csh 提供了更多功能 sh:已经被bash替换 nologin:让用户无法登录
bash特性
支持快捷键:比如 ctrl+c 强制终止进程 、 ctrl+l 清屏 、Tab补齐 等等。 支持查看历史命令(history) 支持别名(alias) 标准输入和标准输出的重定向 管道符 文件名通配机制 支持命令hash 支持变量
shell脚本基本结构
1.脚本申明(申明解释器) :第一行开头 “#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来执行。还有其他类型的解释器,比如 #/usr/bin/python、#!/usr/bin/expect 。
2.注释信息: 以“#”开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行。
3.可执行语句: 如echo命令,用于输出“ ”之间的字符串。
脚本的执行方式
1.指定路径去执行文件(文件需要执行权限)
绝对路径。如:/root/demo.sh
相对路径。如:./demo.sh
2.指定解释器去执行(bash 脚本名),不需要执行权限
bash 脚本名。如:bash demo.sh
重定向和管道符
标准输入和输出
| 类型 | 设备文件 | 文件描述符 | 默认情况 | 对应文件句柄位置 |
|---|---|---|---|---|
| 标准输入 | /dev/stdin | 0 | 从键盘获得输入 | /proc/self/fd/0 |
| 标准输出 | /dev/stdout | 1 | 输出到屏幕 | /proc/self/fd/1 |
| 错误输出 | /dev/stderr | 2 | 输出到屏幕 | /proc/self/fd/2 |
交互式硬件设备:
标准输入:从该设备接收用户输入数据。
标准输出:通过该设备想用户输出数据。
标准错误:通过该设备报告执行出错信息。
重定向
重定向的意思就是,不通过标准输出到默认屏幕上,而是输出到你指定的位置
输入重定向
| 符号 | 作用 |
|---|---|
| 命令 < 文件 | 从指定的文件读取文件,而不是从键盘输入 |
| 命令 << 分界符 | 从标准输入中读入,直到遇见分界符才停止 |
| 命令 < 文件1 > 文件2 | 将文件1 作为命令的标准输入并将标准输出到文件2 |
输出重定向
| 符号 | 作用 |
|---|---|
| 命令 > 文件 | 将标准输出结果保存到指定的文件中(覆盖原有内容) |
| 命令 >> 文件 | 将标准输出结果追加到指定的文件尾部 |
| 命令 2> 文件 | 将错误输出信息保存到指定文件中(覆盖原有内容) |
| 命令 2>> 文件 | 将错误输出信息追加到指定文件尾部 |
| 命令 > 文件 2>&1 | 混合输出,将标准输出与错误输出保存到一个文件中(覆盖原有内容) |
| 命令 &> 文件 | 混合输出,将标准输出与错误输出保存到一个文件中(覆盖原有内容) |
| 命令 &>> 文件 | 混合输出,将标准输出与错误输出追加到一个文件尾部 |
标准输出重定向
标准错误重定向
混合输出重定向
shell中的算术运算
运算表达式
运算演示
运算法则
expr
$( )和反撇号
let 和 (( ))
$(())
$[]
小数运算
Bash内置了对整数运算的支持,但是并不支持浮点运算,而 bc 计算器可以很方便的进行浮点运算。
echo "算术表达式" | bc
awk命令
生成随机数
echo $[RANDOM%n]
shell脚本中的变量
变量概述
变量即在程序运行过程中它的值是允许改变的量。
变量是用一串固定的字符串去表示不固定的内容。
变量表示命令的内存空间,将数据放在内存空间中,通过变量名引用,获取数据。
变量的作用
用来存放系统和用户需要使用的特定参数(值)。
变量名:使用固定的名称,由系统预设或用户定义。
变量值:能够根据用户设置、系统环境的变化而变化。
特殊变量
环境变量(全局变量):全局生效,在任何bash环境中都可以识别。
只读变量:read only, 只可以读取不可以更改 。
位置变量: 通过命令行给脚本传递参数 。n(n是正整数),n(n是正整数),n(n是正整数),{10} 要加花括号。
预定义变量:用来保持脚本程序的执行信息。
环境变量
使用env命令查看所有环境变量:
常用的环境变量
$PATH 表示可执行文件的默认路径
$USER 表示用户名称
$HOME 表示用户的宿主目录
$LANG 表示语言和字符集
$PWD 表示当前所在工作目录
环境变量的特性
可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量。 一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程。 一般只在系统配置文件中使用,在脚本中较少使用。
全局配置文件
/etc/profile,修改此文件会作用于所有用户。
用户独立的配置文件
~/.bash_profile,修改这个文件只作用于当前用户。
全局配置文件
只读变量
位置变量
位置变量也称为位置参数。
使用$n表示,n为数字序列号,且必须为整数。
预定义变量
预定义变量是系统定义好的变量,用来保持脚本程序的执行信息。
可以直接使用这些变量,不能直接为这些变量赋值。
| 变量 | 作用 |
|---|---|
| $? | 表示前一条命令执行后的返回状态。返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常。 |
| $* | 表示所有位置参数的内容。当整体返回。(将输入的参数作为一个单词) |
| $@ | 表示所有位置参数的内容。当个体返回。可作为数组。(将参数内容分割成n份,每份作为独立个体) |
| $# | 表示命令行中位置参数的总个数。 |
| $0 | 表示当前脚本名称(如果是软链接,显示当前软链接文件名)。 |
| $_ | 表示在此之前执行的命令或脚本的最后一个参数。 |
| $$ | 获取当前进程的PID。 |
$?
0,$$,#,$@