Linux shell特殊字符
通配符
- 星号(*)
匹配任意字符
try*c //匹配: try1.c try.c try.basic
- 问好(?)
匹配任意单个字符
- 方括号([])
匹配括号里所限定的任何一个字符
[Mm]akefile //匹配Makefile makefile
file[1-5] //匹配file1 file2 file3 file4 file5
* file[1-20] //匹配file1 file2 *
- 感叹号(!)
如果在方括号内,表示不匹配括号内所限定的任何单个字符
file[!2-4].c //不匹配文件: file2.c 、file3.c 、 file4.c
引号
- 双引号(”)
消除元字符的特殊含义
除 $ ’ ” 三个元字符外,均作为普通字符
保留空白 字符 - 单引号(’)
消除元字符的特殊含义
除单引号自身以外,其它元字符都作为普通字符
用“\”消除单引号的特殊含义 - 倒引号(`)
命令替换, 将一个命令的输出作为另一个命令的参数 - 元字符
指的是在Sheel中含有特殊含义的字符
< > | ; ! ? * [ ] $ \ ” ’ ` { } ( ) ^
输入重定向
<
让命令从指定文件中取得输入数据
wc < fileinfo //将fileinfo作为wc命令的输入<<
改变输入结束的分隔符。以哪个分隔符开始,以哪个分割符结束
管道(|)
(进程通信)通过管道把一个命令的输出传递给另一个命令作为输入
后台命令(&)
将当前命令送到后台执行。给前台命令后加上&就可以使之变成后台命令。
命令执行操作符
顺序执行(;)
格式:
命令1;命令2;…命令n
各条命令从左往右依次执行
逻辑与
格式:
命令1 && 命令2
功能:
先执行命令1,如果成功,才执行命令2;否则不执行命令2
逻辑或
格式:
命令1||命令2
功能:
先执行命令1,如果不成功,就执行命令2;如果成功,就不执行命令2
成组命令
格式:
{命令序列}
(命令序列)
功能:
配对括号之间的所有命令作为一个整体执行
例子:
$ date;who>tmp1
$ (date;who)>tmp2
$ { date;who;}>tmp
tmp1 中只有用户信息
tmp2 中有时间和用户的信息
tmp 中有时间和用户的信息
实际上大括号和小括号在运行时是有区别的,但是它们的输出结果一样。
shell变量
shell支持两种类型的变量:环境变量和局部变量
环境变量
由系统定义,用来保留系统的内容。
环境变量可以被用户修改,当用户注销后,环境变量随之复原(用户修改的环境变量只在当前shell下起作用)
常用的环境变量
查看环境变量
echo HOMEecho H O M E e c h o PATH
使用env命令显示所有的环境变量
使用set命令显示所有本地定义的shell变量(局部变量)
使用readonly命令设置只读变量
修改环境变量
HISTSIZE=500
PS1=here:
局部变量
由用户定义、修改或删除。
命名规则
格式同C语言
变量赋值
- 赋值时等号两边不能有空格
- 变量做右值时要加 ,才表示右值的值例子:a=1b=′date′//将命令的结果作为变量值c= , 才 表 示 右 值 的 值 例 子 : a = 1 b = ′ d a t e ′ / / 将 命 令 的 结 果 作 为 变 量 值 c = a //将一个变量的值赋给另一个变量
引用变量
变量名前面要加 符号echo 符 号 e c h o a $b
查看所有变量–set命令
清除变量–unset命令
unset a
说明
shell变量没有存储类和类型的限制(可以理解为全是字符串变量);
如果值中包含空格,赋值时必须用引号括起来;
如果变量出现在长字符串的开头或中间,为了避免混淆,应该用花括号将该变量名括起来
位置变量
功能: 存放命令行参数
cat file1 file2 file3 file4 …
0
0
1
2
2
3 $4 …
shift命令–移动位置参数
当脚本的参数多于9个时,用shift命令来使用多于9个参数
格式:
shift [n] n表示移动的位数;
若不指定n的值,则默认n为1