BASH

285 阅读4分钟

shell:透过shell将我们的输入的命令与Kernel沟通,让内核控制硬件来正确无误的工作。

bash shell的功能

  • 命令编修能力
  • 命令与文件的补全功能
  • 命令别名的设定功能
  • 工作控制、前景背景控制
  • 程序化脚本
  • 通配符

type:查询指令是否为bash shell的内建命令

type [-tpa] name :type会显示出name是外部指令还是bash内部指令

-t :file 表示外部指令 alias 表示指令为别名所设定的名称 builtin 表示该指令为bash内建的指令功能

-p :如果后面借的是外部指令时,才会显示完整文件名

-a :在PATH变量定义的路径中,将所有name的指令都列出来,包括alias

shell变量

变量的取用 echo

  echo $variable

变量的设定规则

  • 变量与变量内容之间以一个等号连接

  • 等号两边不能直接接空格符

  • 变量名称只能是英文字母与数字,且数字不能作为开头字符

  • 变量内容若有空格可使用双引号或单引号结合起来

  • 可用\将特殊字符转化为一般纯文本字符

    myname=VBird\ Tsai
    ``
    
  • 可以使用反单引号指令或者$(指令)

  • 若该变量为扩展变量内容,则可用“变量名称”或{变量名称}累加内容

PATH="$PATH":/home/bin 或 PATH={PATH}:/home/bin
  • 若该变量需要在其他子程序执行,则需要以export来使变量变成环境变量
export PATH
  • 取消变量的方法为使用 unset命令

env观察环境变量与常见环境变量说明

set观察所有变量

PS1:提示字符的设定

\d :可显示出【星期 月 日】的日期格式

\H :完整的主机名

\h :仅取主机名在第一个小数点之前的名字

\t :显示时间,为24小时格式HH:MM:SS

\T :显示时间,为12小时格式HH:MM:SS

\A :显示时间,为24小时格式HH:MM

@ :显示时间,为12小时格式HH:MM

\u :目前使用者帐号

\v :bash的版本信息

\w :完整的工作目录,由根目录写起

\W :利用basename函数去的工作目录名称,仅会显示最后一个目录名

# :下达的第几个指令

$ :提示字符,如果是root时,提示字符为#,否则就是$

$ 关于本shell的PID(process ID)

? 关于上个指令的回传值

locale 影响显示结构的语系变量

变量键盘读取、数组与宣告:read、array、declare

read [-pt] variable -p :后面可以接提示字符 -t :后面可以接等待的秒数

declare [-aixr] variable

-a :将后面的变量定义为数组类型

-i :将后面的变量定义为整数数字

-X :将后面的变量变为环境变量

-r :将后面的变量设定为只读

变量内容的删除、取代与替换

#代表变量内容从前面开始向后删除,且删除最短的一个

##代表变量内容从前面开始向后删除,且删除最长的一个

% 代表变量内容从后面开始向前删除,且删除最短的一个

%%代表变量内容从后面开始向前删除,且删除最长的一个

bash的进站与欢迎讯息:/etc/issue /etc/motd

##数据流的重定向

  • 标准输入(stdin):代码为0,使用<或<<

  • 标准输出(stout):代码为1,使用>或>>

  • 标准错误输出(stderr):代码为2,使用2>或2>>

/dev/null垃圾黑洞设备与特殊写法

find /home -name .bashrc 2> /dev/null

将正确和错误的信息统统输入一个一个文件中

find /home  -name  .bashrc > list 2> list     错误
find /home  -name  .bashrc > list 2>&1        正确
find /home  -name  .bashrc  &> list           正确

bash的环境配置文件

主要分为login shell与nologin shell。login shell主要读取/etc/profile与~/.bash_profile。nologin shell主要读取~/.bashrc

source :读取环境配置文件的指令

source 配置文件档名

排序命令:sort,wc,uniq

sort排序

uniq [-ic] 将重复的资料仅列出一个显示 -i :忽略大小字符的不同 -c :进行计数

wc [-lwm] 计算讯息的整体数据 -l :仅列出行; -w :仅列出多少字 -m :多少字符

tee 双向重定向

tee [-a] file 同时将数据流送到文件与屏幕

字符转换命令:tr,col,join,paste,expand

tr可以用来删除一段信息中的文字,或者进行文字信息的替换

tr [-ds] SET1 .....

:替换

-d:删除信息当中的SET1这个字符

-s:替换掉重复的字符

col [-xb]

-x :将[tab]键转换为对等的空白键

-b :在文字内有反斜杠时,仅保留反斜杠最后接的那个字符

join [-ti12] file1 file2 处理两个文件的数据,将两个文件有相同数据的那一行加在一起

-t : join默认以空白格作为分隔符,并且对比“第一段字段”的数据,如果两个文件相同,则将两条数据连成一行,且第一个字段放在第一个

-i :忽略大小写差异

-1 :代表第一个文件要哪段字符分析的意思

-2 :代表第二个文件要那段字符分析的意思

paste 直接将两行贴在一起,且中间以[tab]来分隔

expand 将[tab]用空格键代替

-t :后面接数字,一般来说一个[tab]按键可以用8个空格键代替,但我们也可以自己定义

split 切割命令

split [-bl] file PREFIX

-b :后面可接欲切割的文件大小,可加单位 -l :以行数来进行切割

xargs :参数代换