您的位置:首页 > 运维架构 > Shell

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 基础