一、shell是什么?
Shell 本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
如图shell是一个应用程序,是用户管理应用程序的一个接口。
二、广义上shell的分类GUI:图形用户界面
KDE,GNOME,XFCE
CLI:命令行接口
bash, zsh, fishsh, csh, tcsh, ksh
在大多发行版中常用的为bash
三、bash的特性bash是弱类型的编程语言,不严格区分数据类型,意味把所有数据统统当作字符串处理;
字符串类型的数据可不加引号;
引号有三种类型:', ", `
', ":字符引用
': 强引用,其内部的变量不会被替换;
":弱引用,其内部的变量会被替换;
`:命令引用
变量引用:${NAME}
a、bash特性之一:快捷键
ctrl + ? 撤消前一次输入 ctrl + c 另起一行 ctrl + r 输入单词搜索历史命令 删除 ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dl ctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dh ctrl + k 删除光标后面所有字符相当于VIM里d shift+$ ctrl + u 删除光标前面所有字符相当于VIM里d shift+^ ctrl + w 删除光标前一个单词相当于VIM里db ctrl + y 恢复ctrl+u上次执行时删除的字符 ctrl + ? 撤消前一次输入 alt + r 撤消前一次动作 alt + d 删除光标所在位置的后单词 移动 ctrl + a 将光标移动到命令行开头相当于VIM里shift+^ ctrl + e 将光标移动到命令行结尾处相当于VIM里shift+$ ctrl + f 光标向后移动一个字符相当于VIM里l ctrl + b 光标向前移动一个字符相当于VIM里h ctrl + 方向键左键 光标移动到前一个单词开头 ctrl + 方向键右键 光标移动到后一个单词结尾 ctrl + x 在上次光标所在字符和当前光标所在字符之间跳转 alt + f 跳到光标所在位置单词尾部 替换 ctrl + t 将光标当前字符与前面一个字符替换 alt + t 交换两个光标当前所处位置单词和光标前一个单词 alt + u 把光标当前位置单词变为大写 alt + l 把光标当前位置单词变为小写 alt + c 把光标当前位置单词头一个字母变为大写 ^oldstr^newstr 替换前一次命令中字符串 历史命令编辑 ctrl + p 返回上一次输入命令字符 ctrl + r 输入单词搜索历史命令 alt + p 输入字符查找与字符相接近的历史命令 alt + > 返回上一次执行命令 其它 ctrl + s 锁住终端 ctrl + q 解锁终端 ctrl + l 清屏相当于命令clear ctrl + c 中止当前命令 ctrl + d 后台执行(等同于命令后面接&) ctrl + i 类似TAB健补全功能 ctrl + o 重复执行命令 alt + 数字键 操作的次数 Esc-b 左移一个单词 Esc-f 右移一个单词 ctrl+s : 锁住屏幕 ctrl+q : 恢复屏幕b、bash的特性之二:命令历史
shell进程会保存其会话中用户曾经执行过的命令;命令通过其“历史文件”来持久保存此前执行过的命令;每个用户都有其自己专用的历史文件;
HISTSIZE:shell进程的缓冲区保留的历史命令的条数;
HISTFILESIZE:命令历史文件可保存的历史命令的条数;
HOSTTIMEFORMAT:历史命令加时间戳,用于审计;
HISTIGNORE="str1:str2:…"忽略string1,string2历史;
#export HISTTIMEFORMAT="%F %T" ... 358 2016-12-28 04:12:34 man split 359 2016-12-28 04:14:29 cd 360 2016-12-28 04:14:34 vim .bash_history 361 2016-12-28 04:22:39 history默认均为1000;
# echo $HISTSIZE 1000 # echo $HISTFILESIZE 1000HISTFILE:当前用户的命令历史文件;
~/.bash_history
查看命令历史列表:
# history命令用法:
history -c:清空命令历史;
history -d OFFSET:删除指定的条目;
# history -d 156-a:将当前缓冲的历史行追加到历史文件中
-n:从历史文件中读取所有未被读取的行
-r:读取历史文件并将内容追加到历史列表中
-w:保存历史列表到指定的历史文件
-s: 展开历史参数成一行,附加在历史列表后(伪造历史命令)
调用命令历史列表中的命令以重执行之目的: