文档章节

Bash Shell特性

jit-hakase
 jit-hakase
发布于 2017/09/05 21:44
字数 1198
阅读 0
收藏 0

Bash Shell特性

shell变量

  • 常用环境变量和bash变量
    • $_ 上一条命令的最后一个参数
    • $TERM 终端环境类型
    • $SHELL shell类型
    • $HISTSIZE 命令历史条目数
    • $USER 用户名
    • $MAIL 邮箱路径
    • $PATH 命令搜索路径
    • $PWD 当前目录
    • $LANG 语言和编码
    • $HOME 家目录
    • $HOSTNAME 主机名
    • $HOSTTYPE 硬件架构
    • $HISTFILE 命令历史记录文件
    • $$ bash的PID
    • $? 上一个命令的状态码
    • $PS1 命令提示符
    • $PS2 多行命令提示符
    • $RANDOM 随机生成一个0-32767的整数

特性和历史

  • 命令输入快捷键
    • [TAB] 命令/文件 补全
    • [TAB][TAB] 列出所有 命令/文件 路径补全
    • Ctrl+c 终止当前命令
    • Ctrl+d 输入EOF(某些命令的退出符)
    • Ctrl+z 将当前命令暂停并调入后台
    • Ctrl+a 跳到命令行首
    • Ctrl+e 跳到命令行尾
    • Ctrl+u 删除光标至命令行首的内容
    • Ctrl+k 删除光标至命令行尾的内容
    • Ctrl+l 清屏(clear命令)
    • Ctrl+s 暂停屏幕输出
    • Ctrl+q 恢复屏幕输出
  • 命令历史操作
    • !string 执行命令历史中最近一个以指定字符串开头的命令
    • !$(Esc+.) 上一条命令的最后一个参数
    • !n 执行命令历史中的第n条命令
    • !-n 执行命令历史中的倒数第n条命令
    • !! 执行上一条命令

替换和别名

  • 命令别名
    • alias CMDALIAS='CMD' 设定命令别名
    • ualias CMDALIAS 取消命令别名
  • 命令结果替换
    • "" 双引号 弱引用 可以实现变量替换
    • '' 单引号 强引用 不能实现变量替换
    • 替换为命令结果的两种方式
      • $(CMD)
      • `COMMAND`
  • {} 花括号同级展开
    • ./t/{a,b,c} <=> ./t/a ./t/b ./t/c +./t/{a,b}{c,d} <=> ./t/ac ./t/ad ./t/bc ./t/bd
  • 符号替换
    • - 上一个工作目录
    • ~ 当前用户家目录
    • ~USER USER家目录
    • ~+ $PWD
    • ~- 上一个$PWD
    • ${!VAR} VAR的变量名 支持globbing
  • 算术展开
    • $((EXPRESSION)) 例: $((C#N)) C进制的N
    • $[EXPRESSION] 例: $[N1+N2] N1+N2的和
    • {N1..N2} 例: {1..10} 展开1~10的序列
  • 字符串替换
    • ${#STR} 求STRING的长度
    • ${STR:POS} 求从POS开始的子串
    • ${STR:POS:LEN} 求从POS开始长度为LEN的子串
    • ${STR#SUBSTR} 从左往右, 删除最短匹配$SUBSTR.
    • ${STR##SUBSTR} 从左往右, 删除最长匹配$SUBSTR.
    • ${STR%SUBSTR} 从右往左, 删除最短匹配$SUBSTR.
    • ${STR%%SUBSTR} 从右往左, 删除最短匹配$SUBSTR.
    • ${STR/OLD/NEW} 从左往右, 替换第一个$OLD$NEW.
    • ${STR//OLD/NEW} 替换所有$OLD$NEW.
    • ${STR/#OLD/NEW} 如果以$OLD开头, 替换为$NEW.
    • ${STR/%OLD/NEW} 如果以$OLD结尾, 替换为$NEW.

文件名通配(globbing)

  • 文件名通配符号
    • * 任意长度的任意字符
    • ? 任意单个字符
    • [] 匹配指定范围内的任意单个字符
    • [^] 匹配指定范围外的任意单个字符
  • 匹配字符组 ([A1-A2]匹配范围, A1, A2为任意字母或数字.)
    • [a-z] 匹配a-z
    • [A-Z] 匹配A-Z
    • [0-9] 匹配0-9 [a-zA-Z0-9] 匹配字母和数字
  • 特殊符号匹配
    • [[:space:]] 空白字符
    • [[:punct:]] 标点符号
    • [[:lower:]] 小写字母
    • [[:upper:]] 大写字母
    • [[:alpha:]] 大小写字母
    • [[:digit:]] 数字
    • [[:alnum:]] 数字和大小写字母

多命令和重定向

  • 命令连用
    • \ 单行命令延续
    • ; 分步执行命令
    • && 同时执行命令
    • || 上一个命令执行失败时执行命令 && || 相当于if else控制流程结构
  • 重定向
    • < 重定向标准输入
    • << EOF 重定向大段标准输入(EOF结尾)
    • > 重定向标准输出[覆盖方式]
    • >> 重定向标准输出[追加方式]
    • 2> 重定向错误输出(覆盖方式)
    • 2>> 重定向错误输出(追加方式)
    • &> 重定向标准输出和错误输出(覆盖方式)
    • &>> 重定向标准输出和错误输出(追加方式) set -C 禁止对已经存在文件使用覆盖重定向 >|(强制覆盖) set +C 关闭上述功能
  • 管道 将前一个命令的输出作为后一个命令的输入 格式: CMD1 | CMD2 | CMD3 | ...

配置文件

  • 主要配置文件
    • /etc/profile 全局配置文件
    • /etc/profile.d/*.sh 全局配置执行脚本
    • ~/.bashrc 个人配置文件
    • ~/.bash_profile 个人配置文件(不常用)
    • ~/.bash_history 命令历史文件
    • ~/.bash_logout 注销时执行的文件
    • /etc/bashrc 设置一些属性(redhat系列才有)
  • 其他相关
    • /etc/sysconfig/i18n 语言和编码配置文件
    • /etc/man.config 设置man page的搜索路径的文件
    • /etc/issue 登陆显示信息的文件
    • /etc/motd 远程连接登陆显示信息的文件
    • /etc/inputrc 输入特性文件
  • 配置文件调用顺序
    • 登录式
      • /etc/profile
      • /etc/inputrc
      • /etc/profile.d/*.sh
      • /etc/sysconfig/i18n
      • ~/.bash_profile
      • ~/.bashrc
      • /etc/bashrc
    • 非登录式
      • ~/.bashrc
      • /etc/bashrc
      • /etc/profile.d/*.sh
      • /etc/sysconfig/i18n

© 著作权归作者所有

jit-hakase
粉丝 0
博文 26
码字总数 30408
作品 0
南京
程序员
bash特性小结&bash变量

时间就是金钱 效率就是生命 一、bash编程 |---------------| 二、bash特性总结 bash特性: 命令行展开:~,{} 命令别名:alias,unalias 命令历史:history 文件名通配:glob 快捷键:ctrl+...

技术小美
2017/11/08
0
0
bash配置文件介绍

很多在shell进程中定义的特性(如:别名)重启shell后就失效了,可以通过修改bash配置文件来解决重启配置丢失的问题。 bash配置文件分类: profile类:为交互式登录的shell进程提供配置 bash...

嘀充值成功
2017/10/11
0
0
bash脚本总结1:[[:not found 错误

运行shell脚本经常碰到这个坑,但是又不知道是怎么回事,总是怀疑bash版本是不是支持[[ 用法。 1.检查bash版本。 bash --vserion GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gn...

mapleZDW
2017/04/06
0
0
Mac上关于shell使用Python3和C++11声明

1.使用Python3 Mac上的shell上自带的Python版本是2.7,当需要使用Python3时,下载安装好Python时,在shell上敲入Python发现却还是显示Python2.7,这是因为Mac上的shell默认使用系统自带的Pyt...

希希里之海
2017/03/13
0
0
Linux环境变量是什么

什么是环境变量 学习或使用Linux的时候,修改环境变量是经常遇到的,到底什么是环境变量?环境变量是bash shell的特性,用来存储有关shell会话和工作环境的信息。允许在内存中存储数据,以便...

844365389
2016/11/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部