环境变量与文件查找

  环境变量

 变量:shell变量,就是计算机中用于记录一个值的符号,而这些符号将用于不同的运算处理中。通常变量是与值是一对一关系,可以通过表达式读取它的值赋值给其他变量,也可以直接指定数值赋值给任意变量。变量的作用域即变量的有限范围,在该范围内只能有一个同名变量,一旦离开则该变量无效。

 在shell中创建一个变量名为tmp的变量 $declare tmp(只是预声明一个变量),也可以直接给变量赋值 tmp=forever(中间不可以有空格)。读取变量的值,使用echo命令和$符号($符号用于表示引用一个变量的值)  $echo $tmp。变量名只能是英文字母、数字或下划线,且不能以数字作为开头。

 环境变量:作用域比自定义变量大,如Shell的环境变量作用域自身和它的子进程,在所有的UNIX和类UNIX系统中,每个进程都有其个子的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承器父进程的绝大部分环境设置。Shell程序也作为一个进程运行在操作系统之上,我们在Shell中运行的大部分命令都将以Shell的子进程方式运行。

 通常我们会涉及到的环境变量有三种:当前Shell进程私有用户自定义变量,只在当前Shell中有效;Shell本身内建的变量;从自定义变量导出的环境变量。与上述三种环境变量相关的命令分别是set,env,export。为了与普通变量进行区分,常将环境变量名大写。

 set:显示当前Shell所有环境变量,包括其内建环境变量,用户自定义变量及导出的环境变量

 env:显示与当前用户相关的环境变量,还可以让命令在指定环境中运行

 export:显示从Shell中导出环境变量的变量,也能通过它将自定义变量导出为环境变量

 $ temp=shiyanlou

 $ export temp_env=shiyanlou

 $ env | sort>env.txt

 $ export | sort>export.txt

 $ set | sort>set.txt

 $ vimdiff env.txt export.txt set.txt  //使用vimdiff比较三个导出文件的内容

 

 $ temp=shiyanlou

 $ echo temp

 $ zsh //创建子shell

 $ echo $temp

 $ exit

 $ export temp

 $ zsh

 $ echo $temp

 命令的查找路径与顺序:Shell是通过环境变量PATH搜索的。$ echo $PATH(查看环境变量的内容) 

 

 $vim hello_shell.sh

 #!/bin/zsh

 for((i=0; i<10;i++));do

   echo "hello shell"

 done

 exit 0  //在vim中编辑

 $ chmod 755 hello_shell.sh //为文件添加可执行权限

 $ vim hello_world.c

 #include<stdio.h>

 int main(void){

  printf("hello world! ");

  return 0;

 }

 $ gcc -o hello_world hello_world.c //使用gcc生成可执行文件

 $ mkdir mybin  

 $ mv hello_shell.sh hello_world mybin/

 $ cd mybin

 $ ./hello_shell.sh

 $ ./hello_world

  添加自定义路径到PATH环境变量

 PATH路径是以:作为分隔符。

 $ PATH=$PATH:/home/shiyaolou/mybin  //这里一定要使用绝对路径,但当你退出终端后,添加的环境变量又失效了

 在每个用户的home目录中有一个Shell每次启动都会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等。zsh的配置文件是.zshrc,相应的Bash的配置文件为.bashrc。它们在ect下还都有一个或多个全局的配置文件,不过一般指修改用户目录下的配置文件。

 $ echo "PATH=$PATH:/home/shiyanlou/mybin">>.zshrc   //  >>表示将标准输出以追加的方式重定向到一个文件中,若是>则是以覆盖的方式重定向到一个文件中。

  修改和删除已有变量

 变量修改有以下几种方式:

 ${变量名#匹配字串}  从头向后开始匹配,删除符合匹配字串的最短数据

 ${变量名##匹配字串}  从头向后开始匹配,删除符合匹配字串的最长数据

 ${变量名%匹配字串}  从尾向前开始匹配,删除符合匹配字串的最短数据

 ${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据

 ${变量名/旧的字串/新的字串}  将符合就字符串的第一个字串替换为新的字串

 ${变量名//旧的字串/新的字串}   将符合字串的全部字串替换为新的字串

  变量删除  $ unset temp

 我们在Shell中修改了一个配置脚本文件后,每次都要退出终端重新打开甚至重启主机之后才能生效,但我们可以使用source命令来让其立即生效。  $ source  .zshrc      source命令还有个别名是.     $ .  ./.zshrc(第一个点后面有一个空格,且后面的文件必须指定完整的绝对或相对路径名,source则不需要)。

  搜索文件

 与搜索相关的命令常用的有:whereis,which,find,locate。

 $ whereis who  //简单快速  这个搜索很快,并没有从硬盘中依次查找,而是直接从数据库中查找。whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。

 $ locate /etc/sh //快而全  通过“/var/lib/mlocate/mlocate.db”数据库查找。不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行updatedb命令更新一次。所以有时刚添加的文件会找不到,需要手动执行updatedb命令。它可以用来查找指定目录下的不同文件类型。

 $ locate /usr/share/*.jpg //查找/usr/share/下所有jpg文件  *前面的表示转义  若想只统计数目可以加上-c参数,-i可以忽略大小写进行查找。whereis的-b,-m,-s同样试用。

 which本身是Shell内建的一个命令,通常使用which来确定是否安装了某个指定的软件,因为它只从PATH变量的指定的路径中去搜索命令。

 $ which man  //精而细 

 find不但可以通过文件类型、文件名进行查找,而且还可以根据文件的属性进行搜索。

 $ find /etc/ -name interfaces //find命令的路径是作为第一个参数的,基本命令格式为find[path][option][action]

 与时间相关的命令参数:

 -atime  最后访问时间          -ctime 创建时间         -mtime   最后修改时间

 -mtime n : n为数字,表示在n天之前的"一天之内"修改过的文件

 -mtime +n : 列出在n天之前(不包含n天本身)被修改过的文件

 -mtime -n : 列出在n天之前(包含n天本身)被修改过的文件

 newer file : file为一个已存在的文件,列出比file还要新的文件名

 $ find ~ mtime 0   //列出home目录中,当天24小时内有改动的文件

 $ find ~ newer Documents/test.c~   //列出用户家目录下比Document/test.c~文件新的文件

  

  数字雨

 $ sudo apt-get update; sudo apt-get install cmatrix

  

 

 

原文地址:https://www.cnblogs.com/forerver-elf/p/4645913.html