本文包含的命令:type、echo、evn、set、locale、read、declare / typeset、ulimit、alias、unalias、history、!、source、stty、cut、grep、sort、uniq、wc、tee、tr、col、join、paste、expand、split、xargs。

概念与知识点:

  • 双引号里面的变量有意义,单引号里面的变量没有意义。
  • 变量的简单定义:『变量就是以一组文字或符号等,来取代一些设定或者是一串保留的数据!』
  • 变量设定的规则:
    1. 变量与变量内容以一个等号『=』来连结,如下所示: 『myname=VBird』
    2. 等号两边不能直接接空格符,如下所示为错误: 『myname = VBird』或『myname=VBird Tsai』
    3. 变量名称叧能是英文字母与数字,但是开头字符不能是数字,如下为错误: 『2myname=VBird』
    4. 变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但
      1. 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
        1. 『var="lang is $LANG"』则『echo $var』可得『lang is en_US』
      2. 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
        1. 『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』
    5. 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;
    6. 在一串指令中,还需要藉由其他的指令提供的信息,可以使用反单引号『`指令`』或 『$(指令)』。
    7. 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:『PATH="$PATH":/home/bin』
    8. 若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:『export PATH』
    9. 通常大写字符为系统默认变量,自行设定变量可以使用小写字符,方便判断。
    10. 取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的设定:『unset myname』
  • 环境变量会被子程序继承,而自定义变量不会被子程序继承。
  • 变量内容的删除、取代与替换
    • 删除-----例:

      • ${path#/*:}---------匹配的是第一个是/,最后一个是:的内容 *为通配符

        • # :符合取代文字的『最短的』那一个;-------------从前面开始删除
        • ##:符合取代文字的『最长的』那一个
        • %与%%意义与#与##类似,与过是从后面开始删除
    • 取代-----${path/sbin/SBIN}
  • 路径与指令搜寻顺序
    1. 以相对/绝对路径执行指令,例如『 /bin/ls 』或『 ./ls 』;
    2. 由 alias 找到该指令来执行;
    3. 由 bash 内建的 (builtin) 指令来执行;
    4. 透过 $PATH 这个变量的顺序搜寻到的第一个指令来执行。
  • bash 的进站与欢迎讯息: /etc/issue, /etc/motd  /etc/issue.net
    • issue内的各代码意义

      • \d 本地端时间的日期;
      • \l 显示第几个终端机接口;
      • \m 显示硬件的等级 (i386/i486/i586/i686...);
      • \n 显示主机的网络名称;
      • \o 显示 domain name;
      • \r 操作系统的版本 (相当于 uname -r)
      • \t 显示本地端时间的时间;
      • \s 操作系统的名称;
      • \v 操作系统的版本。
    • /etc/issue.net---------供telnet登录显示的欢迎信息,设置同 issue一样
    • /etc/motd ----登入系统后得到的一些警告或维护信息
  • bash 的环境配置文件
    • login 与 non-login shell

      • login shell:取得 bash 时需要完整的登入流程

        • 会读取的配置文件

          • /etc/profile:这是系统整体的设定,你最好不要修改这个档案;

            • /etc/inputrc
            • /etc/profile.d/*.sh
            • /etc/sysconfig/i18n
          • ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设定,你要改自己的数据,就写入这里!
      • non-login shell:取得 bash 接口的方法不需要重复登入的举动(不需要再次输入密码)
        • 会读取的配置文件

          • ~/.bashrc---呼叫/etc/bashrc
  • 数据流量导向
    • 标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
    • 标准输出 (stdout):代码为 1 ,使用 > 或 >> ;
    • 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;
    • 标准输出与标准错误输出同时输入到同一个文件  2>&1 ;
      • 例:find /home -name .bashrc 【> list】 【2>&1】 <==正确
  • $? (指令回传值) 与 && 或 ||
    • cmd1 && cmd2

      • 若 cmd1 执行完毕且正确执行($?=0),则开始执行 cmd2
      • 若 cmd1 执行完毕且为错误 ($?≠0),则 cmd2 不执行。
    • cmd1 || cmd2
      • 若 cmd1 执行完毕且正确执行($?=0),则 cmd2 不执行。
      • 若 cmd1 执行完毕且为错误 ($?≠0),则开始执行 cmd2。
  • 管线的命令: |
    • 在每个管线后面接的第一个数据必定是『指令』,而且这个指令必须要能够接叐 standard input 的数据才行,这样的指令才可以是为『管线命令』,例如 less, more, head, tail 等都是可以接叐 standard input 的管线命令。至于例如 ls, cp, mv 等就不是管线命令。
    • 管线命令仅会处理 standard output,对于 standard error output 会予以忽略
    • 管线命令必须要能够接叐来自前一个指令的数据成为 standard input 继续处理才行。
  • 关于减号 - 的用途
    • 在管线命令当中,常常会使用到前一个指令的 stdout 作为这次的 stdin , 某些指令需要用到文件名 (例如 tar)来进行处理时,该 stdin 与 stdout 可以利用减号 "-" 来替代,
  • 修改语系的配置文件
    • vim /etc/sysconfig/i18n
  • 数组变量的赋值
    • 数组名[参数序号]=内容

相关命令:

  1. cat /etc/shells-----------查看系统可用的shells
  2. type---------查看命令的类型:内建或外部-------------只能查找执行档
    • type [-tpa] name

      • -t :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:

        • file :表示为外部指令;
        • alias :表示该指令为命令别名所设定的名称;
        • builtin :表示该指令为 bash 内建的指令功能;
      • -p :如果后面接的 name 为外部指令时,才会显示完整文件名;
      • -a :会由 PATH 变量定义的路径中,将所有含 name 的指令都列出来,包含 alias
  3. echo----------变量的取用
    • echo $变量名 --------------显示变量的具体路径
    • -e 选项为使内容中的特殊字符生效,例如\n 换行
  4. evn---------观察环境变量
  5. set----------观察环境变量(含所有变量:环境变量与自定义变量)
  6. locale -a---------显示所有的语系变量
  7. read-------------读取来自键盘输入的变量
    • read [-pt] 变量名称 ==============变量名与参数之间必须需要空格

      • -p :后面可以接提示字符!
      • -t :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!
  8. declare / typeset----------变量类型宣告
    • declare [-aixr] variable

      • -a :将后面名为 variable 的变量定义成为数组 (array) 类型
      • -i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
      • -x :用法不 export 一样,就是将后面的 variable 变成环境变量;
      • -r :将变量设定成为 readonly 类型,该变量不可被更改内容,也不能 unset
  9. ulimit------------与文件系统及程序的限制关系:
    • ulimit [-SHacdfltu] [配额]

      • -H :hard limit ,严格的设定,必定不能超过这个设定的数值;
      • -S :soft limit ,警告的设定,可以超过这个设定值,但是若超过则有警告讯息。
      • -a :后面不接任何选项不参数,可列出所有的限制额度;
      • -c :当某些程序发生错误时,系统可能会将该程序在内存中的信息写成档案(除错用),这种档案就被称为核心档案(corefile)。此为限制每个核心档案的最大容量。
      • -f :此 shell 可以建立的最大档案容量(一般可能设定为 2GB)单位为 Kbytes
      • -d :程序可使用的最大断裂内存(segment)容量;
      • -l :可用于锁定 (lock) 的内存量;
      • -t :可使用的最大 CPU 时间 (单位为秒);
      • -u :单一用户可以使用的最大程序(process)数量。
  10. 变量的判断:
    • ${变量#关键词}   若变量内容从头开始的数据符合『关键词』,则将符合的最短数据删除
    • ${变量##关键词}   若变量内容从头开始的数据符合『关键词』,则将符合的最长数据删除
    • ${变量%关键词}   若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据删除
    • ${变量%%关键词}   若变量内容仍尾向前的数据符合『关键词』,则将符合的最长数据删除
    • ${变量/旧字符串/新字符串} 若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』
    • ${变量//旧字符串/新字符串} 若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』
  11. alias --------------------命令别名
    • alias rm='rm -i'
  12. unalias -----------------取消命令别名
    • unalias lm
  13. history-----------------历史命令
    • history [n]
    • history [-c]
    • history [-raw] histfiles
      • n :数字,意思是『要列出最近的 n 笔命令行表』的意思!
      • -c :将目前的 shell 中的所有 history 内容全部消除
      • -a :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,则预设写入 ~/.bash_history
      • -r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
      • -w :将目前的 history 记忆内容写入 histfiles 中!
  14. !number  --------------------------根据历史命令重复历史命令
    • !command
    • !!
      • number :执行第几笔指令的意思;
      • command :由最近的指令向前搜寻『指令串开头为 command』的那个指令,幵执行;
      • !! :就是执行上一个指令(相当于按↑按键后,按 Enter)
  15. source :读入环境配置文件的指令 -------------------不用注销,使修改的bash生效
    • source 配置文件档名
  16. stty--------------显示终端机的环境设定
    • stty -a ------------------将目前所有的 stty 参数列出来;
    • stty erase ^h-------------设置erase(删除)为[ctrl]+h 键
  17. set [-uvCHhmBx]
    • u :预设不启用。若启用后,当使用未设定变量时,会显示错误讯息;
    • -v :预设不启用。若启用后,在讯息被输出前,会先显示讯息的原始内容;
    • -x :预设不启用。若启用后,在指令被执行前,会显示指令内容(前面有 ++ 符号)
    • -h :预设启用。与历史命令有关;
    • -H :预设启用。与历史命令有关;
    • -m :预设启用。与工作管理有关;
    • -B :预设启用。与刮号 [] 的作用有关;
    • -C :预设不启用。若使用 > 等,则若档案存在时,该档案不会被覆盖。
  18. cut-------------截取信息
    • cut -d'分隔字符' -f fields <==用于有特定分隔字符
    • cut -c 字符区间 <==用于排列整齐的讯息
      • -d :后面接分隔字符。与 -f 一起使用;
      • -f :依据 -d 的分隔字符将一段讯息分割成为数段,用 -f 取出第几段的意思;
      • -c :以字符 (characters) 的单位取出固定字符区间;
  19. grep------------分析一行信息。若有所要的信息就将该行拿出来
    • grep [-acinv] [--color=auto] '搜寻字符串' filename

      • -a :将 binary 档案以 text 档案的方式搜寻数据
      • -c :计算找到 '搜寻字符串' 的次数
      • -i :忽略大小写的不同,所以大小写规为相同
      • -n :顺便输出行号
      • -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
      • --color=auto :可以将找到的关键词部分加上颜色的显示喔!
  20. sort------------排序-----------可被管道使用
    • 先将语系统一----------LANG=C
    • sort [-fbMnrtuk] [file or stdin]
      • -f :忽略大小写的差异,例如 A 与 a 视为编码相同;
      • -b :忽略最前面的空格符部分;
      • -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
      • -n :使用『纯数字』进行排序(默认是以文字型态来排序的);
      • -r :反向排序;
      • -u :就是 uniq ,相同的数据中,仅出现一行代表;
      • -t :分隔符,预设是用 [tab] 键来分隔;
      • -k :以那个区间 (field) 来进行排序的意思
  21. uniq--------------消除重复----------可被管道使用
    • uniq [-ic]

      • -i :忽略大小写字符的不同;
      • -c :进行计数
  22. wc----------------计算输出的讯息的整体数据!----------可被管道使用
    • wc [-lwm]

      • -l :仅列出行;
      • -w :仅列出多少字(英文单字);
      • -m :多少字符;
  23. tee----------------双向重导向----------可被管道使用
    • tee [-a] file

      • -a :以累加 (append) 的方式,将数据加入 file 当中!
  24. 字符转换命令: tr, col, join, paste, expand
    1. tr 用来初除一段讯息当中的文字,戒者是进行文字讯息的替换!

      • tr [-ds] SET1 ...

        • -d :删除讯息当中的 SET1 这个字符串;
        • -s :取代掉重复的字符!
    2. col 删除跳脱符、将tab转换成空格
      • col [-xb]

        • -x :将 tab 键转换成对等的空格键
        • -b :在文字内有反斜杠 (/) 时,仅保留反斜杠最后接的那个字符
    3. join 处理两个档案之间的数据
      • join [-ti12] file1 file2

        • -t :join 默认以空格符分隔数据,幵且比对『第一个字段』的数据,如果两个档案相同,则将两笔数据联成一行,且第一个字段放在第一个!
        • -i :忽略大小写的差异;
        • -1 :这个是数字的 1 ,代表『第一个档案要用那个字段来分析』的意思;
        • -2 :代表『第二个档案要用那个字段来分析』的意思。
      • 例:[root@www ~]# join -t ':' -1 4 /etc/passwd -2 3 /etc/group
    4. paste 将两行贴在一起,且中间以 [tab] 键隔开
      • paste [-d] file1 file2

        • -d :后面可以接分隔字符。预设是以 [tab] 来分隔的!
        • - :如果 file 部分写成 - ,表示来自 standard input 的资料的意思。
      • 例:cat /etc/group|paste /etc/passwd /etc/shadow -|head -n 3
    5. expand 将 [tab] 按键转成空格键
      • expand [-t] file

        • -t :后面可以接数字。一般来说,一个 tab 按键可以用 8 个空格键取代。我们也可以自行定义一个 [tab] 按键代表多少个字符
  25. split----------分割命令
    • split [-bl] file PREFIX

      • -b :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等;
      • -l :以行数来进行分割。
      • PREFIX :代表前导符的意思,可作为分割档案的前导文字。(如果分割的有三个文件,即为PREFIXaa、PREFIXbb、PREFIXcc)
  26. xargs-------参数代换,很多指令其实并不支持管线命令,因此我们可以透过 xargs 来提供该指令引用 standard input 之用!
    1. xargs [-0epn] command

      • -0 :如果输入的 stdin 吨有特殊字符,例如 `, \, 空格键等等字符时,这个 -0 参数 可以将他还原成一般字符。这个参数可以用于特殊状态喔!
      • -e :这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs 分析到 这个字符串时,就会停止继续工作!
      • -p :在执行每个指令的 argument 时,都会询问使用者的意思;
      • -n :后面接次数,每次 command 指令执行时,要使用几个参数的意思。
    2. 例:
      1. [root@www ~]# find /sbin -perm +7000 | ls -l
      2. # 结果竟然仅有列出 root 所在目录下的档案!这不是我们要的!
      3. # 因为 ll (ls) 并不是管线命令的原因啊!
      4. [root@www ~]# find /sbin -perm +7000 | xargs ls -l  即可解决

bash中的通配符与特殊符号:

  • *     代表『 0 个到无穷多个』任意字符
  • ?     代表『一定有一个』任意字符
  • [ ]  同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』
  • [ - ] 若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的诧系编码是连续的!
  • [^ ] 若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,叧要是非 a, b, c 的其他字符就接叐的意思。
  • # 批注符号:这个最常被使用在 script 当中,规为说明!在后的数据均不执行
  • \ 跳脱符号:将『特殊字符或通配符』还原成一般字符
  • | 管线 (pipe):分隔两个管线命令的界定;
  • ; 连续指令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同)
  • ~ 用户的家目录
  • $ 取用变数前导符:亦即是变量之前需要加的变量取代值
  • & 工作控制 (job control):将指令变成背景下工作
  • ! 逻辑运算意义上的『非』 not 的意思!
  • / 目录符号:路径分隔的符号
  • >, >> 数据流重导向:输出导向,分别是『取代』与『累加』
  • <, << 数据流重导向:输入导向
  • ' ' 单引号,不具有变量置换的功能
  • " " 具有变量置换的功能!
  • ` ` 两个『 ` 』中间为可以先执行的指令,亦可使用 $( )
  • ( ) 在中间为子 shell 的起始与结束
  • { } 在中间为命令区块的组合!

linux Bash的更多相关文章

  1. 转: windows 10使用原生linux bash命令行

    转: https://www.zybuluo.com/pandait/note/337430 windows 10使用原生linux bash命令行 linux bash windows-10 第一时 ...

  2. Linux Bash代码 利用for循环实现命令的多次执行

    Linux Bash代码 [yuanhao15@lu01 libsvm-rank-2.81]$ for ((i=0; i<=19; i++)) do ./svm-train -s 5 -c 10 ...

  3. linux BASH shell设置字体与背景颜色

    linux BASH shell下设置字体及背景颜色的方法. BASH shell下设置字体及背景颜色  echo -e "\e[31mtest\e[41m"  \e[30m 将字 ...

  4. Linux:-bash: ***: command not found

    Linux:-bash: ***: command not found,系统很多命令都用不了,均提示没有此命令. 突然之间linux很多命令都用不了,均提示没有此命令. 这应该是系统环境变量出现了问题 ...

  5. Linux Bash命令关于程序调试详解

    转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...

  6. 禁用Linux bash rm --force

    防止无意的Linux bash rm --force 二.禁用rm -rf 因为rm -rf 删除文件的时候,经常会不小心将系统文件或者多个有用的目录删除掉.有两种方法:1,每次删除都用-i(inte ...

  7. linux bash关闭标准输出1(exec 1<&-)后重新打开

    linux bash shell的再次学习. 文件描述符: stdin,stdout 和 stderr 的文件描述符分别是 0,1 和 2(一个文件描述符说白了就是文件系统为了跟踪这个打开的文件而分配 ...

  8. win10开启 linux Bash命令(win10内置了linux系统支持)

    win10开启 Ubuntu linux Bash命令(win10内置了linux系统支持) 第一步: 先在设置→更新和安全→针对开发人员中选择"开发人员模式",点击后会下载&qu ...

  9. 【Linux】linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法

    linux bash shell之变量替换::=句法.=句法.:-句法.-句法.=?句法.?句法.:+句法.+句法   linux bash shell之变量替换::=句法.=句法.:-句法.-句法. ...

  10. Win10系统开启Linux Bash命令行

    Win10系统开启Linux Bash命令行 导读 在Build2016上微软为了拉拢开发者发了个大招,那就是Win10一周年更新集成原生Linux Bash命令行功能,这将允许开发者或用户在Wind ...

随机推荐

  1. 为 C# 代码生成 API 文档(译)

    原文地址:http://broadcast.oreilly.com/2010/09/build-html-documentation-for-y.html#comments Sandcastle 功能 ...

  2. 我终于搞清楚为什么谷歌地图获取到的联通3G基站与大家手头的基站表不同了

    我终于搞清楚这个问题了,大家使用谷歌地图手机版.MobileTrack以及网优用的FieldTest获取到的WCDMA基站Cellid为什么不是大家手头的CellTrack91或基站表里的数字了... ...

  3. WPF中嵌入普通Win32程序的方法

    公司现在在研发基于.Net中WPF技术的产品,由于要兼容旧有产品,比如一些旧有的Win32程序.第三方的Win32程序等等,还要实现自动登录这些外部Win32程序,因此必须能够将这些程序整合到我们的系 ...

  4. 《Linux内核分析》课程总结

    朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 不知不觉,在网易 ...

  5. Nginx+Nodejs搭建图片服务器

    图片上传请求由Node处理,图片访问请求由Nginx处理. 1.Nginx配置 #user nobody; worker_processes 1; #error_log logs/error.log; ...

  6. php disk_free_space与disk_total_space实例介绍

    php disk_free_space 函数与disk_total_space 函数教程,第一个函数是指函数返回的空间,以字节为单位,在指定的目录,而disk_total_space 函数返回的总空间 ...

  7. c/c++运算顺序问题

    发现没弄清楚这个问题的人很多,连我们c++老师都没弄清楚,转载一篇文章,以及C++ Primer原文. 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句 ...

  8. LinQ To Object 基本用法

    http://www.cnblogs.com/terryzh/archive/2012/11/10/2763538.html LinQ To Object 基本用法 inq的基本语法:var resu ...

  9. 洛谷P3383 【模板】线性筛素数

    P3383 [模板]线性筛素数 256通过 579提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 Too many or Too few lines 样例解释有问题 ...

  10. skiplist

    §1 Skip List 介绍 Skip List是一种随机化的数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间).基本上, 跳跃列表是对有序的链表增加上 ...