shell基础知识(进阶一)
目录
什么是shell
shell是系统和计算机硬件交互时使用的中间介质。
重定向符
-
输入重定向 <
作用:用于把文件数据流输入给命令
使用格式:
wc -l < /etc/passwd #把/etc/passwd文件的数据流导入给wc -l命令#
- 输出重定向 >
作用:用于把命令的处理结果输出给后面的文件(会覆盖之前的内容)
使用格式:
ls -l /etc/passwd > test #把ls -l /etc/passwd命令执行的结果输入到test文件中#
- 追加重定向 >>
作用:用于把命令的处理结果输出给后面的文件(不会覆盖之前的内容)
使用格式:
ls -l /etc/passwd >> test #把ls -l /etc/passwd命令执行的结果输入到test文件中#
- 错误重定向 2>
作用:用于把命令的错误处理结果输出给后面的文件(会覆盖之前的内容)
使用格式:
sl /etc/passwd 2> test #因为sl命令不存在,所以语句执行失败,会把错误返回输入到test文件中#
- 错误追加重定向 2>>
作用:用于把命令的错误处理结果输出给后面的文件(不会覆盖之前的内容)
使用格式:
sl /etc/passwd 2>> test #因为sl命令不存在,所以语句执行失败,会把错误返回输入到test文件中#
- 统合输出重定向 &>
作用:用于把命令的执行结果(无论成功或错误)全部输入给后面的文件
使用格式:
bash test.sh > test1 #执行test.sh脚本,把执行结果输出到test1文件中#
管道符(任意门)|
作用:用于将管道符左侧的命令处理结果传给管道符右侧命令,从而进行二次处理。
使用格式:
grep /bin/bash /etc/passwd | wc -l #输出系统中有多少个用户可以登陆终端#
通配符
- 通配符 *
作用:用于匹配空值或无穷多信息
使用格式:
ls /dev/sdb* #匹配/dev目录下所有文件名以sdb开头的文件#
- 通配符 ?
作用:用于匹配单个字符(有且只有一个字符)
使用格式:
ls /dev/sdb??? #匹配/dev目录下文件名以sdb开头且后面有三个字符的文件#
- 通配符 []
作用:用于匹配符号中一个范围内所有文件,或字符组合中所有文件
使用格式:
ls /dev/sdb[0-9] #匹配/dev目录下文件名开头是sdb且后面数字是0-9的文件#
ls /dev/sdb[a-z][A-Z] #匹配/dev目录下文件名开头是sdb且后面是英文字母的文件#
ls /dev/sdb[1,3,5] #匹配/dev目录下文件名开头是sdb且后面数字是1,3,5的文件#
ls /dev/sdb[1,2,b] #匹配/dev目录下文件名开头是sdb且后面是1,2,b的文件#
ls /dev/sdb[0-9][0-9] #匹配/dev目录下文件名开头是sdb且后面数字是0-99的文件#
转义符
- 转义符 \
作用:用于将有含义的符号转换成普通字符
使用格式:
price=5 #定义一个变量
echo Price \$$price #输出 Price $5
- 转义符 ""
作用:用于把含有空格的输出内容括成一个整体,使脚本更简洁明了
使用格式:
price=5 #定义一个变量
echo "Price \$$price" #输出 Price $5
- 转义符 ''
作用:用于全局转义
使用格式:
price=5 #定义一个变量
echo 'Price \$$price' #输出 Price \$$price
- 转义符 ``(等同于$())
作用:``中间的命令语句会先执行,之后把执行结果返回给变量
price=`expr $RANDOM%1000` #定义价格变量为1000以内的数字
环境变量
执行一条命令有以下几种方式:
- 输入命令完整路径(可以使用whereis命令查看命令完整路径)
- 使用alias使过长命令简化
命令使用格式:
alias srn="systemctl restart network" #把重启网卡的命令简化为srn#
snr #重启网卡#
注:alias简化的命令只能再当前用户下使用。
- 内部命令
- 外部命令
几个环境变量
- $PATH:用于告诉bash命令路径
- $HOME:用于保存用户家目录的路径
- $MAIL:用于存放邮件的路径
- $HISTSIZE:用于确定历史命令保存条数
- $LANG:用于确定当前服务器语言环境(当远程出现乱码时注意一下这个变量)
- $RANDOM:用于随机生成一个数值
定义环境变量
work=/home/user #定义环境变量#
cd $work #进入/home/user目录下#
注:上例中work变量只能当前用户使用
定义全局变量(所有用户可用)
export work #定义work为全局变量#