一、Bash是什么?
bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)。Bourne shell是一个早期的重要shell,由史蒂夫·伯恩在1978年前后编写,并同Version 7 Unix一起发布。bash则在1987年由布莱恩·福克斯创造。
Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等,Shell Script大致都类同,当您学会一种Shell以后,其它的Shell会很快就上手,大多数的时候,一个Shell Script通常可以在很多种Shell上使用。
bash是大多数Linux系统以及Mac OS X v10.4默认的shell,它能运行于大多数Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现windows的POSIX虚拟接口。此外,它也被DJGPP项目移植到了MS-DOS上。
bash的命令语法是Bourne shell命令语法的超集。数量庞大的Bourne shell脚本大多不经修改即可以在bash中执行,只用了Bourne特殊变量或使用了Bourne的内置命令的脚本才需要修改。 bash的命令语法很多来自Korn shell (ksh) 和 C shell (csh), 例如命令行编辑,命令历史,目录栈,$RANDOM 和 $PPID 变量,以及POSIX的命令置换语法: $(...)。作为一个交互式的shell,按下TAB键即可自动补全已部分输入的程序名,文件名,变量名等等。
二、Bash特性介绍。
1、命令历史。
1)环境变量:$HISTSIZE,设置命令的历史保存最大条数
$HISTFILE,用户退出时的持久保存位置,通常为用户家目录下的.bash_history
$HISTFILESIZE,命令保存文件中可保存的命令最大条数
$HISTCONTROL,命令历史保存规则: ignoredups,忽略重复的命令,连续相同的命令才能匹配
ignorespace,忽略以空白字符打头的命令
ignoreboth,以上二者同时生效
2)命令用法。
history N:显示最近的N条,包括当前命令本身
history -c:清空命令历史
history -d offset:删除指定的偏移处的命令条目
history -a [/path/to/file]:将当前会话的命令历史写入指定文件
3)调用命令历史。
!#:执行命令历史的第#条命令
!!:执行上一条历史命令
!string:执行命令历史由最后一次以string开头的命令
!$:调用上一条命令的最后一个参数
"ESC",".":先按ESC再按"." 功能同上
2、命令补全,
路径补全:每个绝对路径都可以切割为两部分,basename(基名)、dirname(目录名)
3、状态返回值:每个命令执行结束后,会有一个执行状态返回值,有效范围0-255,0表示执行成功,1-255表示执行失败,使用特殊变量"$?"可获取最近一条命令的状态返回值, #echo $?
4、命令行展开:~表示用户家目录,~USERNAME指定用户的家目录
{}:/tmp/{x,y}展开为 /tmp/x,/tmp/y
5、命令别名和命令引用:通过命令alias定义命令别名
定义命令别名:alias grep="grep --color"
撤销别名:unalias grep,unalias -a撤销所有别名
6、bash支持的引用:
''
""
``:引用一个命令的执行结果,$()也是一样
7、文件名通配:
*:任意长度的任意字符 ?:匹配任意单字符 []:匹配指定范围内的任意单字符 [abc],[a-z],[0-9],[0-9a-z] [^]:匹配指定范围以外的任意单字符 [^0-9a-z] [:space:] 所有空白字符 [:punct:] 所有标点符号 [:lower:] 所有小写字母 [:upper:] 所有大写字母 [:digit:] 所有数字 [:alnum:] 所有字符集合 [:alpha:] 所有字母集合
8、输入、输出重定向和管道
标准输入:0 标准输出:1 错误输出:2 重定向:改变其标准位置 输出重定向:COMMAND > POSITION 错误重定向:COMMAND 2> POSITION 合并重定向:COMMAND > POSITION 2>&1 分别重定向:COMMAND > POSITION 2> POSITION2 输入重定向:COMMAND < POSITION
9、快捷键
Ctrl+a:跳转至命令行首
Ctrl+e:跳转至命令行尾
Ctrl+u:删除命令行首至当前光标所在处之前的所有内容
Ctrl+k:删除当前光标所在处至命令行尾的所有内容
Ctrl+l:清屏,类似clear命令
Ctrl+z:把当前命令送至后台执行
10、变量
1)bash变量类别 本地变量:只对当前shell进程有效,对其他shell进程无效,包括当前进程的子进程 变量赋值:VAR_NAME=VALUE 环境变量:对当前shell进程及其子shell有效,对其他的shell进程无效 变量赋值:export VAR_NAME=VALUE 撤销变量:unset VAR_NAME 只读变量:readonly VAR_NAME 局部变量:对shell脚本中某代码片段有效,通常用于函数本地 变量赋值:local VAR_NAME=VALUE 位置变量:对命令参数生效 如:$1指参数1,$2指参数2 特殊变量:例如$?,显示状态返回值 $RANDOM 显示随机数字 2)变量命名 1、不能使用程序中的关键字;如:if,case,for 2、只能使用数字、字母和下划线,且不能以数字开头 3、命名要规范,见名知义 3)变量类型 数值型,字符型,布尔型 类型转换
11、bash的配置文件
profile类:为交互式登录的用户提供配置 全局:/etc/profile /etc/profile.d/*.sh 用户:~/.bash_profile 功用:设定环境变量,运行命令或脚本 bashrc类:为非交互式的用户提供配置 全局:/etc/bashrc 用户:~/.bashrc 功用:设定本地变量,定义命令别名 登录类型:交互式,直接通过终端输入帐号和密码登录,su - username 非交互式,图形界面下打开的终端、执行脚本、su username 交互登录的用户:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc 非交互登录的用户:~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
转载于:https://blog.51cto.com/liang178/1624245