Shell 基础
2018-02-24 16:20
113 查看
Shell 介绍
TAB补全shell是一个命令解析器,提供用户和机器之间的交互
支持特点语法,比如逻辑判别,循环 if for
每个用户都可以有自己特点的shell
CentOS7 默认shell bash (Bourne Agin Shell)
还有zsh、ksh、等
历史命令 history
history -c 清空内存中的记录echo $HISTSIZE 系统的history环境变量
vi /etc/profile history 配置文件
HISTSIZE=100000 可以改大
source /etc/profile 立即生效
HISTTIMEFORMAT="%Y%m%d - %H:%M:%S"
修改history格式 年月日 时分秒
如若使其永久生效必须写进配置文件中 /etc/profile
和HISTSIZE 放一起
永久保存 chattr +a /.bash_history
如果不正常退出,历史命令就会保存不完整
!! :重复上条命令 !n : 重复执行第n号条命令 !echo : 倒叙(从下往上)找第一个echo 的命令执行一遍
命令补全以及别名
tab
tab 键 补全 敲一下补全命令 敲两下补全目录以及其他命令
CentOS 6以前 不支持参数补全
CentOS 7以后都支持
安装多一个包yum -y install bash-completion
alias 别名给命令重新起名字
各用户都有自己配置别名的文件 /root/.bashrc
ls /etc/profile.d/
自定义的alias 放到 /root/.bashrc 还有 /etc/profile.d 下面
通配符。
元字符`*` 前一个字符匹配0次到任意多次(星号前一个字符不起作用) ? 表示一个任意的字符 { } 表示范围内的 或的关系 . 匹配除了换行符外任意一个字符 ^ 匹配行首 $ 匹配行尾 [ ] 匹配中括号指定的任意一个字符,只匹配一个字符 列如[0-9]匹配任意一位数字,[a-z][0-9]匹配小写字母和一位数字构成的两位字符 [^] 匹配除了中括号的字符以外的任意一个字符。取非的结果 列如[^0-9]匹配任意一位非数字字符。 \ 转义符,用于取消特殊符号的含义 \{n\} 表示前面的字符恰好出现n次。 列如:[0-9]\{4\} 匹配4位数字。 [1][3-8][0-9]\{9\}匹配手机号码 \{n,\} 表示前面的字符出现不小于n 次。 列如[0-9]\{2,\} 表示两位及以上的数字 \{n,m\} 表示前面的字符出现至少n次,最多m次。 列如 :[a-z]\{6,8\}匹配6-8位的小写字母
输入输出重定向
">" 把正确输出的结果 重定向 到定义的文件中 以覆盖的方式 ">>" 把输正确出的结果 重定向 到定义的文件中 尾部追加 "2>" 把命令产生的错误信息 输出到文件中去 以覆盖的方式 "2>>" 把命令产生的错误信息 输出到文件中去 追加重定向 "2>&1" 把正确和错误的信息都追加到文件里去 "<" 输入重定向 wc -l < 1.txt 将文件计数
管道符 " | "
把前面命令的结果传给后面的命令执行; : 命令1;命令2 多个命令顺序执行,命令之间没有任何的逻辑关系 && : 命令1 &&命令2 逻辑与 || : 命令1 || 命令2 逻辑或 * ls && echo yes || echo on
作业控制
ctrl + z 停止信号放入后台 jobs 列出停止的任务 fg +工作号 将任务放前台 bg +工作号 将任务放后台 sleep 休眠 命令 & 放入后台运行
nohup
nohup 用途:不挂断地运行命令。 语法:nohup Command `[ Arg … ] [ & ]` 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。 退出状态:该命令返回下列出口值: 126 可以查找但不能调用 Command 参数指定的命令。 127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。 否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
变量
PATH 、HOME 、PWD、 LOGNAMNE 系统变量 一般都是大写字母 env 查看环境变量命令 set 查看系统所有变量命令 多了很多变量,并且包括用户自定义的变量 set -u :调用未声明变量是会报错 unset 删除变量 环境变量:全局变量 用户自定义变量: 局部变量、本地变量 自定义变量 a=1 变量名规则:可以是字母、数字下划线,首位不能为数字 变量值有特殊符号时需要用单引号括起来 单引号 ‘ 中间不识别变量’ 双引号“中间可识别变量” echo $SSH_TTY 显示自己所在的终端、 pstree 进程树
变量的累加
全局变量 export b=2 export 定义全局变量 向下的全局变量 环境变量 环境变量配置文件 系统级别的 /etc/profile 用户环境变量,交互,登录才执行 /etc/bashrc 用户不用登录,执行shell就生效 /etc目录下的文件,会对所有用户起作用,对登录起 /etc/.bashrc /etc/profile /etc/.bash_profile.d/*.sh 家目录文件下,只会对当前用户起作用 /root/.bash_profile /root/.bashrc /root/.bash_history /root/.bash_logout 用户退出做的操作 ~ 表示用户家目录 PS1=`'\[\033[01;32m\][\u@\h\[\033[00m\]\[\033[01;36m\] \W\[\033[01;00m\]]\$' source <=>.`
特殊符号
`*` 任意个任意字符 ? 任意一个字符 `#` 注释字符 \ 脱义字符 | 管道符
cut、sort、uniq、wc
cut 分割 -d 分隔符 -f 指定断号 -c 指定第几个字符 sort 排序 -n 以数字排序 (字母和符号默认为0) -r 反排序 -t 分割符 -kn1/-kn1,n2 wc -l 统计 行数 -m 统计字符数 -w 统计词 以空格为分隔符 cat -A 查看所有包括隐藏符 uniq 去重复 (先排序再去重复) -c 统计重复行数 tee 和 > 类似 , 重定向的同时还在屏幕显示 tee -a 追加 相当于 '>>' tr 替换字符 (针对字符操作) tr'a' 'b',大小写替换tr '[a-z]' '[A-Z]' split 切割 -b 大小(默认单位字节) -l 行数
特殊符号
1. $ 变量前缀 !$组合 正则里面表示行尾 2. ; 多条命令写到一行去,用分号分割 3. ~用户家目录,后面正则表达式表示匹配符 4. &放到命令后面,会把命令放置后台 5. `>` , >> , (正确重定向)2> , 2>>(错误重定向) , &> 正确错误重定向 6. [ ] 指定字符中的一个,[0-9],[a-zA-Z],[abc] 7. || 和 && 与或 逻辑关系,用于命令之间
条件判断、逻辑关系表达
两个整数比较
-eq -> '=' 等于 -ne -> '≠' 不等于 -gt -> '>' 大于 -lt -> '<' 小于 -ge -> '≥' 大于等于 -le -> '≤' 小于等于
字符串判断
-z 字符串 -> 是否为空 -n 字符串 -> 是否为非空 字符串 == 字符串 -> 字符串是否相同,相等 字符串 !=字符串 -> 字符串是否不相等
多重条件判断
条件1 -a 条件2 -> 相与,都成立则为0 条件1 -o 条件2 -> 香或,有一个成立则为0 ! 条件 -> 非,与原来相反
if [ ] 条件判断式
-r file 用户可读为真 -w file 用户可写为真 -x file 用户可执行为真 -f file 文件为正规文件为真 -d file 文件为目录为真 -c file 文件为字符特殊文件为真 -b file 文件为块特殊文件为真 -s file 文件大小非0时为真 -t file 当文件描述符(默认为1)指定的设备为终端时为真
两个文件之间比较
文件1 -nt 文件2
判断文件1的修改时间是否比文件2的 新 (如果新,则为真。修改时间)
文件1 -ot 文件2
判断文件1的修改时间是否比文件2的 旧 (如果旧,则为真。修改时间)
文件1 -ef 文件2
判断文件1是否和文件2的 iNode号一致,可以理解为两个文件是否为同一文件。
(这个判断作用于判断硬链接是很好的方法)
相关文章推荐
- 【shell编程基础3】shell编程的组合应用之二:管道及其命令
- shell 基础 $(cd `dirname $0`;pwd)
- shell基础——二元比较操作符
- Unix-Shell基础总汇
- shell脚本编程之基础
- shell 基础知识
- shell基础知识
- Shell基础-Bash基本功能-历史命令与补全
- 学习shell脚本之前的基础知识
- shell基础二:查找技巧,find及xargs的使用
- 【Shell 编程基础第一部分】第一个Shell脚本HelloShell及一些简单的Shell基础书写与概念
- Shell脚步攻略之管道重定向基础
- SHELL脚本--shell数组基础
- shell基础sed用法
- shell基础二:查找技巧,find及xargs的使用
- 【Linux基础】为什么要学shell
- shell基础--cat命令的使用
- shell脚本基础
- 浅谈Linux下shell的入门与基础
- 9.1 Shell脚本基础