bash shell的学习路程(一)

前言:谨以此来纪念未来的几个月,希望在苦难中涅盘!

------------------------------分割线-------------------------------

学习思路:以鸟哥私房菜为主,其它资料为辅,进行学习,记录的目的是为了更好的去理解,而不是仅仅作为记录!

------------------------------分割线-------------------------------

----------------------------------------------------开始---------------------------------------------------------------------------

Linux(Redhat)默认的shell-------> /bin/bash------>兼容sh

系统上合法的shell都会写在/etc/shells的文件中!

用户什么时候取得shell来工作------>当用户登录的时候就会取得当前用户的一个shell,记录在/etc/passwd(每一行的最后列)文件中!

bash的优点:

(1)记忆使用过的命令------>个数1000个(默认,可以自己设置)------>位置当前用户家目录的~/.bash_history(隐藏文件)!

此文件的特点:记录前一次登录以前所执行过的命令,而本次登录执行的命令暂存在临时内存中,当系统注销后会记录到此文件

(2)命令与文件补全功功能------>几个热键(后续补充)和Tab键(命令补全和文件补全)

(3)命令别名的设置(alias)--->后续讲解

(4)作业控制(job)、前台控制(foreground)、后台控制(background)------>和进程有关,理解各含义!--->ctrl+c来中断进程!

(5)核心:程序脚本--->shell scripts--->脚本中写入命令正则表达式等!

(6)统配符:帮助查询命令执行

问题1:如何区分命令是bash shell 内置命令还是外部命令?

type命令

type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。

命令类型:

  • alias:别名;
  • keyword:关键字,Shell保留字;
  • function:函数,Shell函数;
  • builtin:内建命令,Shell内建命令;
  • file:文件,磁盘文件,外部命令;
  • unfound:没有找到

说明:上面标示蓝线的地方是-t参数;下面标示粉线的地方是-p的特点:为外部命令时才会显示完整的文件名;-a是显示PATH定义的变量中(一般是路径),将所有含此name的命令显示出来!

用法:

type 选项[-tpa] 参数name

补充:如果后面接的名称并不能以执行文件的状态(x)被找到,该名称不会显示出来!

--------------------------------------------

需求:如果命令串太长的话,想用两行来输出怎么办?------>反斜杠紧跟Enter键--->"\[Enter]"--->注意没有空格

说明:反斜杠主要是为了转义特殊的字符串------>上面执行完之后,一般会出现">"的提示符!

--------------------------------------------

shell的变量

变量的概念:用一个简单的字眼来替代一个复杂的或者容易变动的数据!

MAIL变量:内容是/var/spool/mail/当前用户--->当使用信件读取mail命令读取自己的邮箱的时候,这个程序可以直接读取此变量!自动分辨属于谁的信箱邮件了!

影响bash环境操作的变量:

PATH变量:能不能在任何目录下执行某个命令与此变量相关!

特点:系统优先从PATH变量内容中所记录的路径查找命令,没有查询到则提示"command not found"的错误信息!

常见的系统环境变量:PATH、HOME、MAIL、SHELL等,通常大写

技巧:将变量定义写在最前面,后面的路径用变量来代替!

-----------------分割线------------------------------

如何显示变量内容呢?------>echo $变量或者echo ${变量}---->理解变量与变量内容的联系与区别!

说明:如果变量尚未被设置,默认的内容是“”--->一个空行

那么如何设置变量的内容?----->用“等号(=)”连接其变量和内容!

设置规则:

(1)等号两边不能直接接空格符----->不加任何修饰(单引号或者双引号)--->形如:var =HH、var= HH!

(2)变量名称只能是英文字母和数字,但是开头字符不能是数字!----->区别与Java变量的字母数字和下划线$等

(3)变量内容有空格符:可以使用引号或者引号将变量的内容结合起来!

(4)双引号如果有特殊字符:如$

      1)可以保持其原本的特性!--->在一个变量的内容中出现类似"$变量",显示的时候会显示其代表的内容!

      2)特殊字符仅为一般字符(文本),即与后面的变量也组合不了特殊的含义

(5)可用转移字符"\"将特殊符号([Enter]、$、\、空格符、!)变成一般字符!--->注意各字符的特殊含义

(6)在一串的命令中,还需要通过其它命令提供的信息,可以使用反单引号(`命令`)或$(命令)

注意:反单引号---->`命令`位置在1数字的左边!

说明:通常一个命令的输出结果作为另一个命令的参数!

举例:version=$(uname -r)---->echo $version----->取得内核版本!

(7)增加变量的内容:用“$变量名称“或${变量}类加内容

eg:PATH=“$PATH:/home/bin”

注意事项:后续整合!

(8)该自定义变量需要子进程执行,则需要export使自定义变量变成环境变量!

说明:默认子进程是不会继承父进程的自定义变量!------> export 变量

(9)方便用户判断大写字符为系统默认变量自定义变量使用小写字符!

(10)取消变量:unset 变量名称

细节:如果没有空格或者特殊字符,不加单引号或者双引号,则是普通的字符串!

内核的模块目录:/lib/modules/$( uname -r)/knerl

---------------------------------------------------

单引号和双引号的区别(特别注意):

单引号:仅能是一般字符,不会有特殊字符!------>会失去原有的变量内容!

双引号:可以保有变量的内容!

案例:p303,深刻的理解其含义!

反单引号(`)符号代表的意义---->命令执行过程中,在 `之内的命令先被执行,其执行的结果将作为外部的信息输入!

locate:列出所有的相关文件名!-->后续关注这个命令!

列出每个crontab相关文件名的权限:ls -l `locate crontab`-->执行过程:先locate把文件名数据列出来,再以ls命令来处理!

需求:目录太长,可以用变量的形式代替,然后“cd $var“降低命令的执行错误,完成相同的任务!

猜你喜欢

转载自blog.csdn.net/wzj_110/article/details/82860057