• 环境变量与文件查找


      环境变量

     变量: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

      

     

     

  • 相关阅读:
    码农如何通过编程赚更多的钱
    理解 OAuth 2.0 认证流程
    把同事的代码重写得干净又整洁,老板却让我做回滚?
    精读《如何做好 CodeReview》
    互联网行业的软件与人员的代际更迭随想
    十大最佳自动化测试工具
    使用 docker 高效部署你的前端应用
    在Linux 命令行中转换大小写
    Python批量检测服务器端口可用性与Socket函数使用
    基于华为云CSE微服务接口兼容常见问题
  • 原文地址:https://www.cnblogs.com/forerver-elf/p/4645913.html
Copyright © 2020-2023  润新知