shell基础
转至:https://www.cnblogs.com/tui463/archive/2004/01/13/12186154.html
shell基础
概念
shell是系统跟计算机硬件交互时使用的中间介质
支持特定语法
每个用户都可以有自己特定的shell
CentOS7默认shell为bash
记录命令历史
最多保存1000条历史命令,保存在用户家目录的.bash_history文件中
# !! 表示执行上一条指令
# !n 表示执行命令历史中的第n条指令
# !字符串 表示执行命令历史中最近一次以字符串开头的命令
命令和文件名补全
tab键可以补全一个指令、一个路径或者一个文件名
连续按两次tab键,系统会把所有的命令或者文件名都列出来
别名
# alias 命令别名=具体名字 把一个常用的而且很长的指令另取名为一个简单易记的指令
# unalias 解除别名功能
通配符
可以使用*来匹配零个或多个字符,用?匹配一个字符
输入/输出重定向
输入重定向用于改变命令的输入,命令是<
输出重定向用于改变命令的输出,命令是>
输出更常用,经常用于将命令的结果输入到文件中
错误重定向命令2>以及追加重定向命令>>
管道符
管道符 | 用于将前一个指令的输出作为后一个指令的输入
作业控制
当运行进程时,Ctrl+Z 使进程暂停,fg 恢复进程,bg 使进程后台运行,Ctrl+C 使进程终止
# jobs 查看被暂停或者在后台运行的任务
变量
变量就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据
通常,shell预设的变量都是大写的
PATH就代替了所有常用命令的绝对路径的设定
命令env
# env 列出系统预设的全部系统变量
常见的环境变量
HOSTNAME 表示主机的名称
SHELL 表示当前用户的shell类型
HISTSIZE 表示历史记录数
MAIL 表示当前用户的邮件存放目录
PATH 该变量决定了shell将到哪些目录中寻找命令或程序
PWD 表示当前目录
LANG 与语言相关的环境变量,多语言环境可以修改此环境变量
HOME 表示当前用户的家目录
LOGNAME 表示当前用户的登录名
命令set
# set 不仅可以显示系统预设的变量,也可以显示用户自定义的变量
(自定义变量只能在当前shell中生效)
允许系统内所有用户登陆后都能使用该变量
仅允许当前用户使用该变量
在用户主目录下的 .bashrc 文件的最后一行加入export myname-Aming ,然后运行source .bashrc刷新配置
设置自定义变量
设定变量的格式为a=b,其中a为变量名,b为变量的内容,等号两边不能有空格
变量名只能由字母、数字以及下划线组成,而且不能以数字开头
当变量内容带有特殊字符(如空格)时,需要加上单引号
变量内容中本身带有单引号,就需要加双引号
变量内容中需要用到其他命令,需要加反引号
变量内容可以累加其他变量的内容,需要加双引号
使用双引号时,不会取消双引号中特殊字符本身的作用,而使用单引号时,里面的特殊字符将全部失去其本身的作用
如果在当前shell中运行bash指令,则会进入一个新的shell,这个shell就是原来shell的子shell
想让变量在子shell中生效
取消某个变量
系统环境变量与个人环境变量的配置文件
/etc/profile 这个文件预设了几个重要的变量
/etc/bashre 这个文件主要预设umask以及PS1,PS1就是在输入命令时前面的那串字符
.bash_profile 该文件定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专属于自己的shell信息,当用户登录时,该文件仅仅执行一次
.bashre 该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件会被读取
.bash_history 该文件用于记录命令历史
.bash_logout 当退出shell时,会执行该文件
Linux shell中的特殊符号
*代表零个或多个任意字符
?代表一个任意的字符
注释符号#
脱义字符 \ 这个字符会将后面的特殊符号还原为普通字符
管道符 | 作用是将前面命令的输出命令作为后面命令的输入
命令cut
# cut -d ‘分割字符’ [-cf] n 用来截取某一个字段
-d 后面跟分隔字符,分隔字符要用单引号括起来
-c 后面接的是第几个字符
-f 后面接的是第几个区块
命令sort
# sort [-t 分隔符] [-kn1,n2] [-nru] 用做排序
-t 后面跟分隔字符
-n 表示使用纯数字排序
-r 表示反向排序
-u 表示去重复
-kn1,n2 表示由n1区间排序到n2区间
命令wc
wc命令用于统计文档的行数(-l)、字符数(-m)或词数(-w)
命令uniq
uniq命令用来删除重复的行
-c 表示统计重复的行数,并把行数写在前面
命令tee
tee命令后面跟文件名。作用类似与重定向>,把文件写入后面所跟的文件时,还显示在屏幕上
命令tr
tr命令用于替换字符,常用来处理文档中出现的特殊符号
-d 表示删除某个字符,后面跟要删除的字符
-s 表示删除重复的字符
替换、删除以及去重复等操作都是针对一个字符来讲的,有一定的局限性
命令split
split命令用于切割文档
-b 表示依据大小来分隔文档,单位为byte
-l 表示依据行数来分隔文档
特殊符号
符号 $ 可以用作变量前面的标识符,还可以和!结合起来使用
$!表示上条命令中的最后一个变量
符号 ;想在一行中运行两个或两个以上的命令,需要在命令之前加符号
符号 ~ 表示用户的家目录,root用户的家目录是/root,普通用户则是/home/username
符号 & 想把一条命令放到后台执行,需要加上该符号,通常用于命令运行时间较长的情况
重定向符号>、>>、2>、2>>,分别代表取代、追加、错误重定向、错误追加重定向
中括号【】内为字符组合,代表字符组合中的任意一个,可以是一个范围
符号&&和||