Skip to content

Latest commit

 

History

History
167 lines (155 loc) · 8.75 KB

Linux-bash-shell-notes.md

File metadata and controls

167 lines (155 loc) · 8.75 KB

认识Bash这个Shell

[TOC] December 8, 2017 11:01 PM


1.Bash shell的功能

  • 命令编修能力:能够记忆使用过的命令,记录在~/.bash_history文件中,每次编辑执行的命令暂存在内存中,当登出系统时,指令记忆才会记录到该文件中。
  • 命令与文件补全功能
  • [Tab]接在一串指令的第一个字后面,则为命令补全;
  • [Tab]接在一串指令的第二个字以后时,则为文件补齐;
  • 命令别名设置功能:可以自定义指令代替系统默认的指令。
  • 工作控制、前景背景控制
  • 程序化脚本(shell scripts)
  • 万用字符

2.type查询指令

$ type [-tpa] name:用于查询某个指令是内置指令还是外部指令。 选项与参数:

  • 不加任何选项与参数时,type会显示name是外部指令还是bash内部指令。
  • -t:将name以下面这些字眼显示出它的意义:
  • file:表示外部命令
  • alias:表示该指令为命令别名
  • builtin:表示该指令为bash内置的指令功能
  • -p:如果后面的name是外部指令,才会显示完整的文件名
  • -a:会由PATH变量定义的路径中,将所有含name的指令都列出来,包含alias。

3.指令的下达与快速编辑按钮

  • \:跳脱字符,换行时将[Enter]键“跳脱出来”,让[Enter]按键不再具有“开始执行”的功能。空格也需要用**\来跳脱。 注意:\**仅仅跳脱相邻的下一个字符。
  • 删除整行指令 | 组合键 | 功能 | |:------------:|:-------------:| |[ctrl]+u/[ctrl]+k|分别是从光标处向前删除以及从光标处向后删除| |[ctrl]+a/[ctrl]+e|分别是让光标移动到整个指令串的最前面或最后面|

4.Shell的变量

  • echo:取用变量 $ echo $variable:取用variable变量
  • 设置变量 newvariable=oldvariable 注意:在bash中,当一个变量尚未被设置时,默认的内容是“空的”。 变量的设置规则
  • 变量与变量内容用**=**连接。
  • 等号两边不能直接接空白字符。
  • 变量名称只能是英文字母与数字,但是开头字符不能是数字
  • 变量内容中的字符可以使用双引号或单引号将变量内容结合起来:
    • 双引号内特殊字符如**$**,可保留原本的特性。
    • 单引号内的所有字符都是一般字符。
  • 可以用跳脱字符**\**将特殊符号([Enter],$,,空白字符等)变成一般字符。
  • 在一串指令执行中,还需要借由其他额外的指令所提供的的信息时,可以使用反反引号 ` 或**$**。如:version=$(uname -r)
  • 若该变量为扩增变量内容时,可用**"$变量名称"${变量}**累加内容。如:PATH="$PATH":/home/bin
  • 若该变量需要在其他子程序里面执行,那么需要将该变量变成环境变量。
  • 通常大写字符为默认的系统变量,自行设置变量可以使用小写的字符,方便判断。
  • 取消变量的方法可以使用unset,即$ unset name

5.环境变量

  • 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 变量名称

6.语系变量(locale)

使用locale指令进行查询Linux支持的语系。例子如下:

$ locale -a

说明:所有的语系文件都存放在/usr/lib/locale目录中,系统默认的语系定义在/etc/locale.conf中

7.read:变量键盘的读取

$ read [-pt] variable 选项与参数:

  • 不接参数,那么主动出现一个空白行等待输入
  • -p:后面可以直接接提示符
  • -t:后面可以接等待的“秒数” 如下面的例子:
$ read -p "Please keyin your name: " -t 30 named
……****:****:
$ echo ${named}

8.declare/typeset:宣告变量的类型

$ declare [-aixr] variable 选项与参数:

  • 不接参数,主动将所有的变量名称与内容全部叫出来。
  • -a:将后面名为variable的变量定义为阵列类型
  • -i:将后面名为 variable 的变量定义成为整数数字 (integer) 类型
  • -x:用法与 export 一样,就是将后面的 variable 变成环境变量
  • -r:将变量设置成为readonly类型,该变量不可被更改内容,也不能unset

阵列变量类型:按照以下的格式进行设置阵列的内容

var[index]=content

9.ulimit:设置限制使用者的某些系统资源

$ 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的设置最简单方法就是登出后再登录,否则要重新设置才行。

10.变量内容的删除、取代和替换

  • 变量的匹配删除与替换(#,%,/) | 变量设置方式 | 说明 | |:----------------:|:------------:| |${变量#关键字} 或者 ${变量##关键字}| #:若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除 ##:若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除| |${变量%关键字} 或者 ${变量%%关键字}| %:若变量内容从尾向前的数据符合“关键字”,则将符合的最短数据删除 %%:若变量内容从尾向前的数据符合“关键字”,则将符合的最长数据删除| |${变量/旧字串/新字串} 或者 ${变量//旧字串/新字串}| /:若变量内容符合“旧字串”则“第一个旧字串会被新字串取代” //:若变量内容符合“旧字串”则“全部的旧字串会被新字串取代”| 例如如下例子:
$ 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|