Bash用法总结

Linux 下shell基本上默认是 bash, 下面是我总结的一些技巧。

&  后台运行程序

()   使用子shell, 比如 (cd ../../commlib/; make)

$()  命令替换,和 ``的作用是一样的

<(命令)  把命令的输出到一个临时文件

<< HereDoc

使用举例:

比如你要在 shell 脚本中 使用 awk 脚本

awk -f <(cat <<EOF

/abc/{

print $0;

}

EOF

)

$(())  执行整数计算 $((66/2))

if (( 算术运算 ))

if [[ 字符串运算 ]]

alias 定义命令别名

dot .  或 source 命令, 在当前shell中执行脚本

exec 可以重定向当前shell的文件描述符, 或运行另一个程序。

trap 可以捕获信号

nohup 防止ssh 挂起导致的问题

screen 可以用来保持 会话,  不受ssh的关闭影响

export 导出变量给子shell使用

tee 可以 把 输出 分流

ENV_VAR=VALUE your_program 这样可以 为这一个程序 修改它环境变量,外部shell的环境变量没有被更改

tac 倒置文件

目录跳转

cd -   快速回到前一个路径

cd  回到用户的home目录

pushd, popd, dirs 实现多目录跳转

pushd 命令用来更改您的当前目录并将其存储在堆栈中。 popd 命令用来从堆栈的顶部移除目录并使您返回该位置。 dirs 命令来显示当前目录堆栈。(dir –v –p)

pushd +n; popd +n 可以操作虚拟目录堆栈

快速跳至常用目录

你可能已经知道$PATH变量可以列出 bash的“搜索路径”——当在当前目录不能找到请求的文件时,bash会自动搜索的目录。不过,bash也支持$CDPATH变量,当试图改变目录时该变量列出cd命令转向的目录。为了使用这个特性,我们要对$CDPATH变量赋值一个目录列表,如下面的例子所示:

bash> CDPATH=‘.:~:/usr/local/apache/htdocs:/disk1/backups‘

bash> export CDPATH

现在,无论何时使用cd命令,bash将会检查$CDPATH列表中的所有目录来查找要转向的目录名。

特殊参数

1) $*: 代表所有参数,其间隔为IFS内定参数的第一个字元

2) [email protected]: 与*星号类同。不同之处在於不参照IFS

3) $#: 代表参数数量

4) $?: 执行上一个指令的返回值

5) $-: 最近执行的foreground pipeline的选项参数

6) $$: 本身的Process ID

7) $!: 执行上一个背景指令的PID

8) $_: 显示出最後一个执行的命令

bash快捷键

Emacs风格

ctrl+p: 方向键 上 ↑

ctrl+n: 方向键下 ↓

ctrl+b: 方向键 ←

alt+f: 光标右移一个单词

ctrl+f :方向键 →

alt+b: 光标左移一个单词

ctrl+a:光标移到行首

ctrl+e:光标移到行尾

ctrl+k:清除光标后至行尾的内容。

ctrl+d: 删除光标所在字母;注意和backspace以及ctrl+h的区别,这2个是删除光标前的字符

ctrl+r:搜索之前打过的命令。会有一个提示,根据你输入的关键字进行搜索bash的history

ctrl+m : 输入回车

ctrl+i : 输入tab

ctrl+[ : 输入esc

其它

ctrl+h:删除光标前一个字符,同 backspace 键相同。

alt + p 非增量方式反向搜索历史

alt + > 历史命令列表中的最后一行命令开始向前

ctrl+u: 清除光标前至行首间的所有内容。

ctrl+w: 移除光标前的一个单词

ctrl+t: 交换光标位置前的两个字符

ctrl+y: 粘贴或者恢复上次的删除

ctrl+l:清屏,相当于clear。

ctrl + xx 光标在行头与行尾进行跳转

alt+r 撤销当前行的所有内容

ctrl+z : 把当前进程转到后台运行

ctrl+s : 锁住屏幕

ctrl+q : 恢复屏幕

ctrl+v key: 输入特殊字符

alt + l 将当前光标处之后的字母转化成小写字母

alt + u 将当前光标处之后的字母转化成大写字母

ctrl + Alt + e 扩展命令行的内容(例如:ls  =>  ls  -l  --color=tty)

ctrl+c:杀死当前进程, 输入模式下,中断输入的命令。

ctrl+d:退出当前 Shell

esc + . 快捷键可以轮询历史命令的参数或选项。

esc + t 快捷键可以 置换前两个单词。

输入重复字母 Esc {100} e 可以输入100个e字符

按多次{esc}可以补全

{esc}{~}可以补全本机上的用户名

{esc}{/}可以补全文件名

{esc}{@}可以补全主机名,localhost可以方便地用 lo补全.

Bang Bang 历史命令

!!    重新执行上一条命令

!N  重新执行第N条命令。比如 !3

!-N 重新执行倒数第N条命令。!-3

!string  重新执行以字符串打头的命令。 比如 !vim

!?string?  重新执行包含字符串的命令。 比如 !?test.cpp?

!?string?%  替换为: 最近包含这个字符串的命令的参数。比如:   vim !?test.cpp?%

!$   替换为:上一条命令的最后一个参数。比如 vim !$

!!string  在上一条命令的后面追加 string ,并执行。

!Nstring  在第N条指令后面追加string,并执行。

^old^new^  对上一条指令进行替换

修饰

:s/old/new/  对第N条指令中第一次出现的new替换为old。 比如 vim !?test.cpp?:s/cpp/c/

:gs/old/new/  全部替换

:wn  w为数字, 取指令的第w个参数.

:p 回显命令而不是执行, 比如 !ls:p  。 这个很有用, 你可以先查看你选的命令对不对,要执行时再使用!!

Bash相关文件

/etc/profile 设置环境变量(所有用户)

~/.bash_profile 设置环境变量(当前用户)

~/.bashrc

~/.bash_history

~/.bash_logout

时间: 2024-08-28 19:07:35

Bash用法总结的相关文章

Bash的类型(交互、登录)及其相关配置文件

最近在学习Bash方面的相关知识,了解了Bash的基本分类和其相关的配置文件.在参考网上一些资料的时候,发现网上的一些资料写得很乱而且也不够全面,同时对shell分类的定义也不够本质,甚至某些说法还有一些误导读者的倾向.索性自己根据Bash手册页中的相关内容总结一下. Bash用法概览: bash [option] file Bash部分选项说明(只取和本篇相关的来说明): -c string 如果使用-c选项,将从string处读取命令.如果string后面有参数(具体指令的参数argumen

Linux -高阶命令行技巧

熟练地操作命令行是一项常常被我们忽视的技能,又或者说我们将它看的太过神秘.不过作为一名软件工程师,掌握这一技能可以很大程度上提升我们工作的灵活性,提高工作效率.这篇文章是我在与 Linux 打交道的过程中总结出的一些小技巧.有些很基础,有些也相当专业,不太好懂.这篇文章不长,不过如果你能在工作中充分使用这里介绍的技能的话,那你也知之甚多了. 这里的许多内容一开始已出现在 Quora,但考虑到 Github 的用户性质,他们比我有天赋而且可以随时提出改进意见,因此使用 Github 更合适.如果你

十分钟写一个简单的docker

我在这个视频(http://pan.baidu.com/s/1c0fKOtM)里介绍了容器虚拟化的原理,主要有三个方面:资源隔离,命名空间隔离,运行环境隔离.这些东西都是linux本身就有的功能,只需要写一个shell脚本,就能实现一个简单的虚拟机,和docker类似. 代码如下: #!/bin/bash #用法:mydocker.sh $root_dir $ip_addr $cpu_us(每秒钟CPU使用的us数) #例如: sh mydocker.sh /images/fedora/ 192

快速搭建IE测试环境(Virtualbox+ievms)

IE下的测试 作为一个有追求的程序员,应该尽可能的远离Windows系统.不论从专业开发者的角度,还是仅仅作为最终用户从使用体验上来说,Windows都可以算是垃圾中的战斗机: 没有shell . 响应极慢 (比如从开机到可用需要多久,再对比一下Mac下的体验).大部分操作都强依赖于鼠标,没有对应的快捷键.各类 病毒 等等. 但是,最为一个职业的程序员,又很难绕开Windows这个 猥琐 而又事实上很现实的存在,毕竟Windows在非专业市场上的占有率还是不容小觑的.一般而言,开发人员可以很轻松

tar备份系统

一.概述 前几天我通过SSH正在调戏汤姆猫(tomcat)的时候,服务器上CentOS突然挂了.开机grub,使用光盘linux rescue修复提示找不到linux分区,然后想mount硬盘备份系统的时候提示硬盘无法挂载.没有办法只能重装系统.吃一堑长一智,决定定期备份下系统. 何时进行备份? 每天晚上12:00 备份到哪? 显然备份到系统所在磁盘不是明智之举,用户应该备份到外接硬盘或者磁带上面.为了让文章看上去更简单,本文所做的例子并没有备份到外接设备上,而是在/backup目录下. 要备份

Linux三剑客之一awk

之前给大家讲述了文本处理三剑客前两种,grep和sed.但是这周学习了第三种awk,感觉awk比前两个功能还要强大,相比sed也是以行进行处理,但是awk能以每一行的间隔符进行处理,用起来会更加方便.因此决定这周给大家详细介绍介绍awk. awk的基本用法:awk [options] 'pattern{action statements;..}' filename 一.options -F 指定间隔符 -v 指定变量 FS:输入字段分隔符,默认为空白字符 OFS:输出字段分隔符,默认为空白字符

svn commit-email自动发送邮件乱码问题的解决,以及及自己写svn同步邮件脚本

工作繁忙,这几天项目的合作者有个要求,就是合作的svn仓库提交后能够自动用邮件通知所有参与的人.这个应该很成熟了.google之,发现一些很常用的方式.比如使用commit-email.pl,关于使用commit-email.pl网上有一堆文章,就不重复了.使用commit-email有乱码解决方案如下 使用commit-email,需要在post-commit 中加入一句 LANG=zh_CN.GB18030 export LANG 这句话能够解决发送邮件的时候log 日志 乱码问题,如果你是

Linux 常用命令解析及Bash Shell脚本用法示例

 摘要 Linux 命令是基于文本格式输入输出的一种程序,按照Unix哲学中强调的程序功能简单,输入宽松,输出严谨,各种程序组合可以具有更强大的功能,而具有这种灵活性的主要原因是Linux规定程序的输入输出必须坚持文件流格式,即文本格式,而这就是Linux系统的核心之一. 对于Bash,即Shell的一种,为现在主流Linux发行版本默认的命令行解释器,是一种功能强大的工具,可以实现对Linux支持的程序命令的组合,从而实现强大功能.类似于Window系统的bat文件,Bash具有更为强大的

Linux基础之bash脚本进阶篇-循环语句(for,while,until)及其特殊用法

什么是循环语句.死循环? 循环语句:将一段代码重复执行0.1或多次:它有进入条件与退出条件. 重复运行多少次?我们如何设定循环语句的重复次数? 为了设定循环语句的重复次数于是就有了进入条件与退出条件. 进入条件:条件满足时进入循环. 退出条件:不符合条件退出循环. 一种特殊的循环:死循环 死循环:在编程中,一个无法靠自身的控制终止的循环称为"死循环".死循环的出现有两种情况: 1.因程序需要刻意写的:2.因程序员的失误造成的. 第二种的死循环通常会造成比较严重的程序错误,甚至会因此而影