[TOC] December 8, 2017 11:01 PM
- 命令编修能力:能够记忆使用过的命令,记录在~/.bash_history文件中,每次编辑执行的命令暂存在内存中,当登出系统时,指令记忆才会记录到该文件中。
- 命令与文件补全功能
- [Tab]接在一串指令的第一个字后面,则为命令补全;
- [Tab]接在一串指令的第二个字以后时,则为文件补齐;
- 命令别名设置功能:可以自定义指令代替系统默认的指令。
- 工作控制、前景背景控制
- 程序化脚本(shell scripts)
- 万用字符
$ type [-tpa] name
:用于查询某个指令是内置指令还是外部指令。
选项与参数:
- 不加任何选项与参数时,type会显示name是外部指令还是bash内部指令。
- -t:将name以下面这些字眼显示出它的意义:
- file:表示外部命令
- alias:表示该指令为命令别名
- builtin:表示该指令为bash内置的指令功能
- -p:如果后面的name是外部指令,才会显示完整的文件名
- -a:会由PATH变量定义的路径中,将所有含name的指令都列出来,包含alias。
- \:跳脱字符,换行时将[Enter]键“跳脱出来”,让[Enter]按键不再具有“开始执行”的功能。空格也需要用**\来跳脱。 注意:\**仅仅跳脱相邻的下一个字符。
- 删除整行指令 | 组合键 | 功能 | |:------------:|:-------------:| |[ctrl]+u/[ctrl]+k|分别是从光标处向前删除以及从光标处向后删除| |[ctrl]+a/[ctrl]+e|分别是让光标移动到整个指令串的最前面或最后面|
- echo:取用变量
$ echo $variable
:取用variable变量 - 设置变量
newvariable=oldvariable
注意:在bash中,当一个变量尚未被设置时,默认的内容是“空的”。 变量的设置规则:
- 变量与变量内容用**=**连接。
- 等号两边不能直接接空白字符。
- 变量名称只能是英文字母与数字,但是开头字符不能是数字
- 变量内容中的字符可以使用双引号或单引号将变量内容结合起来:
- 双引号内特殊字符如**$**,可保留原本的特性。
- 单引号内的所有字符都是一般字符。
- 可以用跳脱字符**\**将特殊符号([Enter],$,,空白字符等)变成一般字符。
- 在一串指令执行中,还需要借由其他额外的指令所提供的的信息时,可以使用反反引号 ` 或**$**。如:
version=$(uname -r)
。 - 若该变量为扩增变量内容时,可用**"$变量名称"或${变量}**累加内容。如:
PATH="$PATH":/home/bin
。 - 若该变量需要在其他子程序里面执行,那么需要将该变量变成环境变量。
- 通常大写字符为默认的系统变量,自行设置变量可以使用小写的字符,方便判断。
- 取消变量的方法可以使用unset,即
$ unset name
。
- env:观察环境变量说明
- HOME:代表使用者的主文件夹
- SHELL:表示当前环境使用的是哪个SHELL程序
- HISTSIZE:曾经下达的历史指令被系统记录的笔数
- MAIL:读取邮箱
- PATH:可执行文件的搜索路径
- LANG:重要,语系数据
- RANDOM:随机乱数变量,取值在0~32767之间
- set:观察所有的变量(含环境变量和自订变量)
- PS1:提示符的设置
- \d:可显示出“星期 月 日”的日期格式
- \H:完整的主机名称
- \h:仅取主机名称在第一个小数点之前的名字
- \t:显示时间,为 24 小时格式的“HH:MM:SS”
- \T:显示时间,为 12 小时格式的“HH:MM:SS”
- \A:显示时间,为 24 小时格式的“HH:MM”
- @:显示时间,为 12 小时格式的“am/pm”样式
- \u:目前使用者的帐号名称
- \v:BASH 的版本信息
- \w:完整的工作目录名称,由根目录写起的目录名称
- \W:利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名
- #:下达的第几个指令
-
$:提示字符,如果是 root 时,提示字符为 # ,否则就是 $ 例子如下:
$ PS1='[\u@\h \w \A #\#]\$ '
- $:关于本shell的PID
- ?:关于上一个执行指令的回传值,如果上一个指令执行成功,那么回传一个0值,如果执行错误,那么以非零的数值代替。
- export:将自订变量转化成环境变量 不接任何参数时,会列出所有的环境变量
$ export 变量名称
使用locale指令进行查询Linux支持的语系。例子如下:
$ locale -a
说明:所有的语系文件都存放在/usr/lib/locale目录中,系统默认的语系定义在/etc/locale.conf中
$ read [-pt] variable
选项与参数:
- 不接参数,那么主动出现一个空白行等待输入
- -p:后面可以直接接提示符
- -t:后面可以接等待的“秒数” 如下面的例子:
$ read -p "Please keyin your name: " -t 30 named
……****:****:
$ echo ${named}
$ declare [-aixr] variable
选项与参数:
- 不接参数,主动将所有的变量名称与内容全部叫出来。
- -a:将后面名为variable的变量定义为阵列类型
- -i:将后面名为 variable 的变量定义成为整数数字 (integer) 类型
- -x:用法与 export 一样,就是将后面的 variable 变成环境变量
- -r:将变量设置成为readonly类型,该变量不可被更改内容,也不能unset
阵列变量类型:按照以下的格式进行设置阵列的内容
var[index]=content
$ ulimit [-SHacdfltu] [配额]
:限制使用者的某些系统资源,包括可以打开的文件数量,可以使用CPU的时间,可以使用的内存总量等。
选项与参数:
- -H:hard limit ,严格的设置,必定不能超过这个设置的数值
- -S:soft limit ,警告的设置,可以超过这个设置值,但是若超过则有警告讯息
- -a:后面不接任何选项与参数,可列出所有的限制额度;
- -c:当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),这种文件就被称为核心文件(core file)。此为限制每个核心文件的最大容量。
- -f:此 shell 可以创建的最大文件大小(一般可能设置为 2GB)单位为 KBytes
- -d:程序可使用的最大断裂内存(segment)容量
- -l:可用于锁定 (lock) 的内存量
- -t:可使用的最大 CPU 时间 (单位为秒)
- -u:单一使用者可以使用的最大程序(process)数量
注意:想要复原ulimit的设置最简单方法就是登出后再登录,否则要重新设置才行。
- 变量的匹配删除与替换(#,%,/)
| 变量设置方式 | 说明 |
|:----------------:|:------------:|
|${变量#关键字} 或者 ${变量##关键字}|
#
:若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除##
:若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除| |${变量%关键字} 或者 ${变量%%关键字}|%
:若变量内容从尾向前的数据符合“关键字”,则将符合的最短数据删除%%
:若变量内容从尾向前的数据符合“关键字”,则将符合的最长数据删除| |${变量/旧字串/新字串} 或者 ${变量//旧字串/新字串}|/
:若变量内容符合“旧字串”则“第一个旧字串会被新字串取代”//
:若变量内容符合“旧字串”则“全部的旧字串会被新字串取代”| 例如如下例子:
$ echo ${path}
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin
……
\#删除第一个目录
$ echo ${path#/*local/bin:}
/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin
- 变量的测试与内容替换 | 变量设置方式 | str没有设置 | str为空字串 | str已设置为非空字串 | |:-------------:|:----------:|:----------:|:----------------:| |var=${str-expr}|var=expr |var= |var=$str | |var=${str:-expr}|var=expr |var=expr |var=$str | |var=${str+expr}|var= |var=expr |var=expr | |var=${str:+expr} | var=| var=| var=expr| |var=${str=expr} | str=expr var=expr|str 不变 var= |str 不变 var=$str | |var=${str:=expr} |str=expr var=expr |str=expr var=expr | str 不变 var=$str| | var=${str?expr}| expr 输出至 stderr| var=| var=$str| |var=${str:?expr} | expr 输出至 stderr| expr 输出至 stderr| var=$str|