bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。

Bash shell 的功能

bash是GNU计划中最重要的工具软件之一,目前也是Linux distributions的标准SHELL。bash主要兼容于SH,并且依据一些使用者需求,而加强版的shell版本。bash主要的特性有底下几个:

  • 命令历史(history):

只要在指令列按【上下键】就可以找到前/后一个输入的指令。而在很多distribution里头,默认的指令记忆功能可以达到1000个。
这么多的指令记录在家目录内的.bash_history,需要注意的是~/.bash_history记录的是前一次登入以前所执行过的指令,而至于这一次登入所执行的指令都被暂存在内存中,当你成功注销系统后,该指令记忆才会记录到.bash_history当中!
####### 命令语法格式:
history [-c] [-d OFFSET] [n]
history -anrw [FILENAME]
history -ps VALUE [VALUE…]
####### 命令的选项
-c: 清空命令历史;
-d offset(偏移量):删除指定命令历史,offset为history显示出来的命令数字
-r: 从文件读取命令历史至历史列表中;
-w:把历史列表中的命令追加至历史文件中;
history #:显示最近的#条命令;


  • 命令与档案补全功能([tab]按键的好处):
  • [Tab]接在一串指令的第一个字的后面,则为命令补全;
  • [Tab]接在一串指令的第二个字的后面,则为档案补齐;
    所以如果我想知道环境中可以执行的指令有几个,就直接在bash的提示字符后面连续按两次TAB。例如想知道以C开头的指令,就按下c【tab】【tab】。
    ————————————————————
  • 命令别名设定功能(alias):

假如我需要知道这个目录底下的所有档案(包含隐藏档)及所有的文件属性,那么需要输入ls -al这样的指令,经常输入同一个指令就会觉得非常麻烦,因此才会用到命令别名。可以直接用lm这个自定义的命令来取代上面的命令。lm=ls -al这个功能,可以在指令列输入alias就可以知道目前的命令别名有哪些了,也可以直接下达命令来设定别名:

alias lm='ls -al'
####### 语法
alias name='COMMAND'


  • 快捷键:

Ctrl+a:跳转至命令行行首
Ctrl+e:跳转至命令行行尾
Ctrl+u:删除行首至光标所在处之间的所有字符;
Ctrl+k:删除光标所在处至行尾的所有字符;
Ctrl+l:清屏,相当于clear
——————————————————————

  • 命令行展开:

以某些bash能够解释的符号来代替命令中的某些参数。
~:展开为用户的家目录;
例:切换至家目录
cd ~;pwd
/root
{}:可承载一个以逗号分隔的列表,并将其展开为多个路径;
例:在/tmp/d目录下创建f1,f2,f3三个文件
touch /tmp/d/f{1,2,3}
bash


  • 命令的执行状态结果:
    bash的基础特性之状态值返回:在bash中使用一个特殊的变量$?来保存上一个命令的执行状态结果。
    0表示成功,
    1-255表示失败
    例如:

  • 变量

变量引用:


变量替换:把变量引用符号出现的位置替换为其指向的内存空间中的数据;

bash变量种类:

本地变量:作用域为当前shell进程;不包括其子进程;

环境变量:使用域为当前shell进程及其子进程;

局部变量:

作用域:生效范围,也即可引用到的范围;

本地变量:
变量赋值:NAME=VALUE

变量引用:



  • 工作控制、前景背景控制(job contril,foreground,background):

举例来说,我们在登陆 bash 后, 想要一边复制文件、一边进行数据搜寻、一边进行编译,还可以一边进行 vi 程序撰写! 当然我们可以重复登陆那六个文字介面的终端机环境中,不过,能不能在一个 bash 内达成? 当然可以啊!就是使用 job control 啦!

进行工作管理的行为中, 其实每个工作都是目前 bash 的子程序,亦即彼此之间是有相关性的。 我们无法以 job control 的方式由 tty1 的环境去管理 tty2 的 bash !

或许你会觉得很奇怪啊,既然我可以在六个终端介面登陆,那何必使用 job control 呢? 真是脱裤子放屁,多此一举啊!不要忘记了呢,我们可以在 /etc/security/limits.conf 里面配置使用者同时可以登陆的连线数,在这样的情况下,某些使用者可能仅能以一个连线来工作呢! 所以罗,你就得要了解一下这种工作管理的模式了!

由於假设我们只有一个终端介面,因此在可以出现提示字节让你操作的环境就称为前景 (foreground),至於其他工作就可以让你放入背景 (background) 去暂停或运行。要注意的是,放入背景的工作想要运行时, 他必须不能够与使用者互动。举例来说, vim 绝对不可能在背景里面运行 (running) 的!因为你没有输入数据他就不会跑啊! 而且放入背景的工作是不可以使用 [ctrl]+c 来终止的』!

总之,要进行 bash 的 job control 必须要注意到的限制是:

这些工作所触发的程序必须来自於你 shell 的子程序(只管理自己的 bash);
前景:你可以控制与下达命令的这个环境称为前景的工作 (foreground);
背景:可以自行运行的工作,你无法使用 [ctrl]+c 终止他,可使用 bg/fg 呼叫该工作;
背景中『运行』的程序不能等待 terminal/shell 的输入(input)


  • 程序化脚本(shell scripts):
shell脚本执行方式

1.直接当做命令下达:该档案必须有rx权限,然后必须可以找到该命令,即要么通过绝对路径或相对路径,或者利用环境变量PATH
2.以bash程序来执行:通过bash shell.sh或许sh shell.sh来执行(shell.sh是我们写好的脚本)。


  • 通配符:
  • brace expansion (花括号扩展)
  • tilde expansion (波浪号扩展)
  • parameter and variable expansion (参数和变量扩展)
  • arithmetic expansion (算术扩展)
  • command substitution (命令置换)
  • word splitting (单词分割)
  • filename expansion (文件名扩展)
  • process substitution(进程替换)

你可能感兴趣的:(bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。)