变量定义
#定义变量
declare $变量名
#或者直接赋值也自动定义变量,注意变量之前不带"$"
变量名=值
#打印变量的值,"$"代表引用变量的值
echo $变量名
在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。
通常我们会涉及到的环境变量有三种:
- 当前 Shell 进程私有用户自定义变量,如上面我们创建的 temp 变量,只在当前 Shell 中有效。
- Shell 本身内建的变量。
- 从自定义变量导出的环境变量。
相关命令 | 说明 |
---|---|
set | 显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量 |
env | 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行 |
export | 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量 |
输出环境变量
#将普通变量输出为环境变量,能被子进程继承
export 变量名
#比较文件的命令
vimdiff 1.txt 2.txt 3.txt ....
命令的查找路径与顺序
$PATH环境变量设置命令搜索路径
#输出当前命令搜索路径的设置
echo $PATH
#./程序名 表示执行当前目录下的指定程序
$PATH中临时添加自定义路径,用冒号连接路径
PATH=$PATH:/home/shiyanlou/Code
如果永久添加需要修改配置文件
zsh是.zshrc bash是.bashrc
本次修改用户目录下的文件
$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
变量修改
变量设置方式 | 说明 |
---|---|
${变量名#匹配字串} | 从头向后开始匹配,删除符合匹配字串的最短数据 |
${变量名##匹配字串} | 从头向后开始匹配,删除符合匹配字串的最长数据 |
${变量名%匹配字串} | 从尾向前开始匹配,删除符合匹配字串的最短数据 |
${变量名%%匹配字串} | 从尾向前开始匹配,删除符合匹配字串的最长数据 |
${变量名/旧的字串/新的字串} | 将符合旧字串的第一个字串替换为新的字串 |
${变量名//旧的字串/新的字串} | 将符合旧字串的全部字串替换为新的字串 |
变量的修改有以下几种方式:
变量设置方式 | 说明 |
---|---|
${变量名#匹配字串} | 从头向后开始匹配,删除符合匹配字串的最短数据 |
${变量名##匹配字串} | 从头向后开始匹配,删除符合匹配字串的最长数据 |
${变量名%匹配字串} | 从尾向前开始匹配,删除符合匹配字串的最短数据 |
${变量名%%匹配字串} | 从尾向前开始匹配,删除符合匹配字串的最长数据 |
${变量名/旧的字串/新的字串} | 将符合旧字串的第一个字串替换为新的字串 |
${变量名//旧的字串/新的字串} | 将符合旧字串的全部字串替换为新的字串 |
变量删除
可以使用unset
命令删除一个环境变量:
$ unset temp
如何让环境变量立即生效
$ source .zshrc
或者
$ . ./.zshrc
注意第二种方式必须指定完整的绝对或相对路径
二、搜索文件
与搜索相关的命令常用的有如下几个whereis
,which
,find
,locate
。
- whereis
简单快速
whereis搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。whereis
只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。
- locate
快而全
通过"/var/lib/mlocate/mlocate.db"数据库查找,系统会使用定时任务每天自动执行updatedb
命令更新一次该数据库,有时需要手动执行一次updatedb
命令将新的文件数据添加进数据库,它可以用来查找指定目录下的不同文件类型,可以递归子目录进行查找,如查找 /etc 下所有以 sh 开头的文件:
$ locate /etc/sh$ locate /home/shiyanlou/Code/*.txt
经测试好像locate 后面要跟绝对路径,另外"*"必须用*来转义
-c 是仅统计数目 -i 是不区分大小写
-
which
小而精
它只从PATH
环境变量指定的路径中去搜索命令
$ which man
-
find
精而细 find 命令非常强大,最好看专门的资料 推荐链接http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html http://www.jz123.cn/text/1720453.html 以下列出几个例子
#查找系统中所有文件名中含D且在第三位的.txt文件
find / -name \?\?D\*.txt
#显示结果含有权限不够的信息,可以如下屏蔽
find / -name \?\?D\*.txt 2>/dev/null
#还可以加sudo执行
#另外,文件名加引号,可以直接用?或*,不用转义
#查找大小在10k-20k之间的*.txt
find / -name '*.txt' -size +10k -size -20k
#查找空目录和空文件
find . -empty
#查找实验楼组的文件
find . -group shiyanlou
#在/tmp目录中查找大于100000000字节并且在48小时内修改的某个文件
find /tmp -size +10000000c -and -mtime +2
#在/tmp目录中查找所有不属于panda的文件
find /tmp ! -user panda
#查找属于shiyanlou用户的文件并显示文件信息
find . -user shiyanlou -ls
#删除找到的*.txt
find . -name '*.txt' -exec rm {} \;
#以上 \; 是为了转义;字符
网友评论