bash基础特性(一)

bash是Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell。 Bourne shell是一个早期的重要shell,由史蒂夫·伯恩在1978年前后编写,并同Version 7 Unix一起发布。

bash基础特性之一:命令历史history

linux命令历史对于在经常要使用命令时候,提高工作效率非常有帮助。bash会记录用户在当前的shell进程会话中执行过的命令,保存在内存里面。正常退出后记录在用户家目录里面的隐藏文件/root/.bash_history里面。当下次登录linux主机时候,bash就会从这个文件读取里面的命令到内存。默认记录是1000条。


和history相关的几个的环境变量:

1.$HISTFILE    命令历史文件存放路径  可用echo   $HISTFILE查看。

2.$HISTSIZE   当前shell进程内存里可保存的命令历史条数。

3.$HISTFILESIZE  定义命令历史文件.bash_history里面可以保存的命令历史条数。

4.$HISTCONTROL    控制命令历史记录的方式

它们可以用echo命令来查看,例如 ~]# echo  $HISTSIZE 


history不带任何参数参数下使用方法

history  -c: 清空命令历史;

history  -d offset:删除当前shell进程中指定命令历史 。例如:~]# history  -d 211删除第211条命令。history  -d 211  5  删除第211--216条命令.

history   -r: 从历史记录文件读取命令历史至历史列表中。

history  -w:把当前shell进程中历史命令列表中的命令追加至命令历史记录文件中。

history #:显示最近的#条命令;例如~]# history  5  显示最近执行过的5条命令。 


调用命令历史列表中的命令

!!:再一次执行上一次的命令。或者ctrl+p 再敲回车也可以。

!n:再一次执行当前shell进程中历史命令列表中的的第n条命令,例如:!10,表示再次执行第十条历史命令。

!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令。

注意:命令的重复执行有时候需要依赖于幂等性;


调用上一条命令的最后一个参数

快捷键:ESC, .:先按下ESC松开再按 .    。

字符串:!$


使用 HISTSIZE 控制历史命令记录的总行数

[root@dxlcentOS ~]# vi .bash_profile

HISTSIZE=100

HISTFILESIZE=100

把这两行追加到.bash_profile文件中,可改为100条,这种改法只对当前用户有效。追加入/etc/profile这文件里面对所有用户有效。


使用 HISTCONTROL 从命令历史中剔除连续重复的条目

[root@dxlcentOS ~]# HISTCOMTROL=ignoredups


使用 HISTCONTROL 清除整个命令历史中的重复条目

[root@dxlcentOS ~]# HISTCOMTROL=erasedups


使用 HISTCONTROL  history 忽略以空格开头的命令

[root@dxlcentOS ~]# HISTCOMTROL=ignorespace

或者 ~]# export HISTCOMTROL=ignoreboth  忽略以空格开头的命令并剔除连续重复的条目


基础特性之二:命令补存,路径补存

命令补存

shell程序在接收到用户执行命令请求并分析完成后,最左边的字符串会被当做命令。按下一次tab键后,shell程序会根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名,给定的打头字符串如果能惟一标识某命令程序文件,则直接补全命令名。不能惟一标识某命令程序文件,再击tab键一次,会给出以你输入的字符开头的命令列表。例如:要执行whereis命令

[root@dxlcentOS ~]# wh   输入wh后,假设后面的字母忘记了,按两次键

whatis    which    whiptail  whoami

whereis  while    who

[root@dxlcentOS ~]# whereis             再加多一个e,是给出列表唯一性,这时候再按一次tab键会补存

路径补存

在给定的起始路径下,以对应路径下的打头字串来逐一匹配起始路径下的每个文件:按一次tab键,如果能惟一标识,则直接补全;否则,再一次tab,给出列表。

总结:无论是命令补存还是路径补存,在输入的时候敲多敲两次tab键,用自动补存来提高输入速度。

基础特性之三:命令行展开

~波浪线展开:自动展开为用户的家目录,或指定的用户的家目录;

{}花括号展开:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;

例如:/tmp/{a,b} 相当于 /tmp/a /tmp/b

在/tmp下创建a_c,a_d,b_c,b_d

[root@dxlcentOS tmp]# mkdir -pv ./{a,b}_{c,d}      可以通俗地理解为多项式相乘。

mkdir: 已创建目录 "./a_c"

mkdir: 已创建目录 "./a_d"

mkdir: 已创建目录 "./b_c"

mkdir: 已创建目录 "./b_d"

[root@dxlcentOS tmp]# ls

a_c

a_d

b_c

b_d

ks-script-F5Sw7L

test.txt

[root@dxlcentOS tmp]#

命令行展开创建多层目录结构:

[root@dxlcentOS tmp]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}

mkdir: 已创建目录 "/tmp/mylinux"

mkdir: 已创建目录 "/tmp/mylinux/bin"

mkdir: 已创建目录 "/tmp/mylinux/boot"

mkdir: 已创建目录 "/tmp/mylinux/boot/grub"

mkdir: 已创建目录 "/tmp/mylinux/dev"

mkdir: 已创建目录 "/tmp/mylinux/etc"

mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d"

mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d/init.d"

mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig"

mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig/network-scripts"

mkdir: 已创建目录 "/tmp/mylinux/lib"

mkdir: 已创建目录 "/tmp/mylinux/lib/modules"

mkdir: 已创建目录 "/tmp/mylinux/lib64"

mkdir: 已创建目录 "/tmp/mylinux/proc"

mkdir: 已创建目录 "/tmp/mylinux/sbin"

mkdir: 已创建目录 "/tmp/mylinux/sys"

mkdir: 已创建目录 "/tmp/mylinux/tmp"

mkdir: 已创建目录 "/tmp/mylinux/usr"

mkdir: 已创建目录 "/tmp/mylinux/usr/local"

mkdir: 已创建目录 "/tmp/mylinux/usr/local/bin"

mkdir: 已创建目录 "/tmp/mylinux/usr/local/sbin"

mkdir: 已创建目录 "/tmp/mylinux/var"

mkdir: 已创建目录 "/tmp/mylinux/var/lock"

mkdir: 已创建目录 "/tmp/mylinux/var/log"

mkdir: 已创建目录 "/tmp/mylinux/var/run"

[root@dxlcentOS tmp]# tree /tmp/mylinux/


快速创建多个文本文件:~]# touch  a{1..10}.txt   /tmp 一次性创建a1.txt  a2.txt  a3.txt  .....

基础特性之四:命令执行状态结果

bash命令执行完成之后,其状态返回值保存于bash的特殊变量$?中。可用~]# echo $?查看

通过状态返回值来输出结果:

成功:用 0 表示命令执行成功

失败:1-255 间的一个值表示命令执行失败,根据命令及其功能不同,返回结果不同。

引用命令执行结果:

$(COMMAND)

或`COMMAND`

命令执行状态结果这个特性编程中常用。


基础特性之五:引用

分  强引用:'  '  通俗的说所见即所得,例如

[root@dxlcentOS tmp]# echo '$HISTFILESIZE'

$HISTFILESIZE 

强引用字符,特殊符号都会按照原原样输出

弱引用:"  "  引用的字符要是变量则会输出变量值。例如

[root@dxlcentOS tmp]# echo "$HISTFILESIZE"

1000

      命令引用:` `(反引号)


基础特性之六:快捷键

Ctrl+a:跳转至命令行行首

Ctrl+e:跳转至命令行行尾

Ctrl+u:删除行首至光标所在处之间的所有字符

Ctrl+k:删除光标所在处至行尾的所有字符

Ctrl+l:清屏,相当于clear

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容