bash - HPECLab/tutorials GitHub Wiki

#bash cheatsheet ####Author: YangJian ####Email : [email protected]

变量的显示与设置

echo $myname 显示变量

myname=YJ 设置变量 unset myname 取消变量 ###变量的设置规则 ###

  1. 变量与变量内容以=连接

    myname=YJ

  2. 等号两边不能直接连空格

    mynmae= YJ Good #wrong

  3. 如有空格用双引号或单引号结合起来

    • 双引号内$保持原本特性

      var= "lang is $LANG" echo $var 可得 lang is en_US

    • 单引号$仅为普通字符

  4. 可以用\将特殊字符转为普通字符

  5. 在一串命令中,还需要通过其他命令提供信息时用`命令`,或$(命令) 如 version =$(uname -r)

  6. 若该变量为增加内容时可用*${变量}$变量*

    PATH=$PATH:/home/bin

  7. 若该变量需要在当前shell里生效,则用export导出为当前环境变量 export PATH

======== ##环境变量 env 显示当前环境变量 set 显示环境变量与自定义变量(shell下自定义的变量)

环境变量与自定义变量的区别在于子进程仅会继承环境变量而不会继承自定义变量,故若想在子进程里使用自定义变量须先将自定义变量用export导出为环境变量

##特殊环境变量

  • PS1(提示符设置)

         \u 用户当前账号
         \W 当前目录名,只显示最后一个目录名
         \w 当前目录名,会显示完整目录名
    
  • $ 当前shell的进程号 echo $$ 得到 19644

  • ? 上个执行命令的回传码 echo $? 若上一进程正常终止,则为0

  • OSTYPE,HOSTTYPE,MACHTYPE 在我的电脑上会显示

       $ echo $OSTYPE 
           x86_64
       $ echo $HOSTTYPE
           darwin14
       $ echo $MACHTYPE
           x86_64-apple-darwin14
    

语系变量

$ locale -a 查看所有语系

#变量读取,数组与声明

  • ##read 读取来自键盘输入的变量

      read [-pt] variable 
      -p :后接提示符
      -t  :后接等待的秒数 若规定时未输入则为原来的值
      read name
      read -p "Please Enter your name " name
      read -p "Please Enter your name in 3 seconds " -t 3 name
    
  • declare/typeset 声明变量的类型

      -a : 数组类型
      -i  :  整数类型
      -x : 将变量变成环境变量 与export 类似
      -r :将变量声明为只读变量 
      -p : 列出变量类型
      $ sum=1+2+3
      $ echo $sum
      1+2+3
      $ declare -i sum
      $ sum=1+2+3
      $ echo $sum
      6
    
    • 变量类型默认为字符串

    • bash环境中的数值运算,仅能为整数

    • 数组变量

        #!/usr/bin/bash
        declare -a var
        var[1]="hello"
        var[2]="world"
        for i in 1 2
        do
            echo "${var[$i]}"
        done
      

#命令别名 alias rm = 'rm -i' unalias rm #历史命令 history n 最近n条命令行
history -w 将目前数据写入~/.bash_history
echo $HISTSIZE
!number 执行第n条历史命令
!! 执行上一条命令
history 显示历史命令

  • 历史记录文件保存在~/.bash_history 该文件在shell注销时更新或通过history -w 强制更新,所以当开多个shell窗口时并不会同时记录多个窗口的历史命令

#路径与命令查找顺序

  1. 以相对/绝对路径执行命令,例如 “/bin/ls" 或"./ls";
  2. 由alias找到该命令来执行
  3. 由bash内置的(builtin)命令来执行
  4. 通过$PATH这个变量的顺序找到第一个命令来执行

bash的环境配置文件

  • login shell 与 nonlogin shell
    • loginshell 是需要登录的shell,如tty1-ttyy窗口,nonlogin shell 是不需要登录的shell
    • loginshell 会读取以下两个配置文件
      1. /etc/profile 为系统整体配置文件,勿轻易修改
      2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile :属于用户个人设置,可以自由修改,且login shell 只会读取三者之一,按顺序读取,若无该文件则读下一文件,否有则读取当前文件即可
  • nonlogin shell 如要读取配置文件需要用source 配置文件名. 配置文件名
  • nonlogin shell 会读取*.bashrc*
  • /etc/man.config 管理查找man page 的路径
  • ~/.bash_logout 记录了注销时该执行什么操作

常用组合按键

  • ^C: 终止当前命令
  • ^D: 输入结束
  • ^M: Enter
  • ^S: 暂停屏幕输出
  • ^Q:恢复屏幕输出
  • ^U: 删除整行
  • ^Z: 暂停目前命令

通配符

* :代表0到无穷多个任意字符
? : 代表一个任意字符
[] : [abcd] 代表 a,b,c,d中任意一个字符
[-]: [0-9] 代表0到9中任意一个字符
[^]: 反向选择 [^abc] 代表非abc得任意字符

#bash里的特殊字符 在正则表达式或字符串里使用这些字符需要转义 # 批注符号 \ 转义符号 | 管道 ; 连续命令的分隔符
~ 用户主文件夹 $ 使用变量前导符 & 作业控制,将命令变成背景下工作 !逻辑运算非 / 目录符号 >,>> 重定向输出,分别表示”替换“和”累加“ <,<< 重定向输入, ‘’ 单引号,不具有变量替换功能 "" 双引号,具有变量替换功能 `` 中间放可执行的命令,等价于$(命令) () 中间为子shell的起始和结束 {} 中间为命令块的组合

数据流重定向

cat > catfile << "eof" 键盘输入 eof 时停止

⚠️ **GitHub.com Fallback** ⚠️