• Linux-shell学习笔记1


    1、检查 /etc/shells 这个文件可以得到有多少可用的shell,一般有一下几个:

    • /bin/sh (已经被 /bin/bash 所取代)
    • /bin/bash (就是 Linux 默认的 shell)
    • /bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的,兼容于 bash)
    • /bin/tcsh (整合 C Shell ,提供更多的功能)
    • /bin/csh (已经被 /bin/tcsh 所取代)
    • /bin/zsh (基于 ksh 发展出来的,功能更强大的 shell)

    Linux 默认就是使用 bash 。

    为什么我们系统上合法的 shell 要写入 /etc/shells 这个文件?

    因为系统某些服务在运行过程中,会去检查使用者能够使用的 shells ,而这些 shell 的查询就是通过 /etc/shells 这个文件。

    当登陆的时候,系统就会分配个 shell 来工作。 而这个登陆取得的 shell 记录在 /etc/passwd 这个文件内。

    2、~/.bash_history 记录的是前一次登陆以前所运行过的命令, 而至于这一次登陆所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到 .bash_history 当中。

    3、

    • [Tab] 接在一串命令的第一个字的后面,则为命令补全;
    • [Tab] 接在一串命令的第二个字以后时,则为『文件补齐』!

    4、命令别名配置功能: (alias)

    命令行输入 alias 就可以知道目前的命令别名有哪些。

    可以直接下达命令来配置别名:

    alias lm='ls -al'

    5、除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与命令下达。

    举例来说,想要知道 /usr/bin 底下有多少以 X 为开头的文件,可以使用:『 ls -l /usr/bin/X* 』

    6、怎么知道某个命令是来自于外部命令(指的是其他非 bash 所提供的命令) 或是内建在 bash 当中?

    利用 type 这个命令来观察即可, type 也可以用来作为类似which命令的用途:找命令

    7、命令太长时可以用 [Enter]  使命令换行继续输入。

    8、下达 ls 这个命令时,系统就是透过 PATH 这个变量里面的内容所记录的路径顺序来搜寻命令。如果在搜寻完 PATH 变量内的路径还找不到 ls 这个命令, 会在屏幕上显示『 command not found 』的错误信息。

    9、为了区别与自定义变量的不同,环境变量通常以大写字符来表示。

    10、可以利用 echo 这个命令来取用变量。变量在被取用时,前面必须要加上$

    11、用『等号(=)』连接变量与他的内容可以配置或修改某个变量

     

    12、

    • 变量与变量内容以一个等号『=』来连结,如下所示:『myname=VBird』
    • 等号两边不能直接接空格符,如下所示为错误: 『myname = VBird』或『myname=VBird Tsai』
    • 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误: 『2myname=VBird』
    • 变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但可用跳脱字符『 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;
        • 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
          『var="lang is $LANG"』则『echo $var』可得『lang is en_US』
        • 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
          『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』
    • 在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』。 例如想要取得核心版本的配置:
      『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』
    • 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:
      『PATH="$PATH":/home/bin』
    • 若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:
      『export PATH』
    • 通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (非强制规定) ;
    • 取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的配置:『unset myname』

    13、在一串命令中,在 ` 之内的命令将会被先运行,而其运行出来的结果将做为外部的输入信息

    14、用env 与 export 可以查看该shell环境下所有的环境变量。

    15、set 除了环境变量之外, 还会将其他在 bash 内的变量通通显示出来。

    16、变量“?”代表上一个运行的命令所回传的值。

    当我们运行某些命令时, 这些命令都会回传一个运行后的代码。一般来说,如果成功的运行该命令, 则会回传一个 0 值,如果运行过程发生错误,就会回传『错误代码』

    17、export: 自定义变量转成环境变量。因为子程序仅会继承父程序的环境变量, 子程序不会继承父程序的自定义变量。

    那如何将环境变量转成自定义变量呢?可以使用declare。

    18、变量的有效范围:我们在上头的export命令说明中,就提到了这个概念了。如果在跑程序的时候,有父程序与子程序的不同程序关系时, 则『变量』可否被引用与 export 有关。被 export 后的变量,我们可以称他为『环境变量』! 环境变量可以被子程序所引用,但是其他的自定义变量内容就不会存在于子程序中。

    19、要读取来自键盘输入的变量,使用 read 这个命令

    read [-pt] variable
    选项与参数:
    -p  :后面可以接提示字符!
    -t  :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!

    20、declare 或 typeset 是一样的功能,就是在『宣告变量的类型』。如果使用 declare 后面并没有接任何参数,那么 bash 就会主动的将所有的变量名称与内容通通叫出来,就好像使用 set 一样啦!

    declare [-aixr] variable
    选项与参数:
    -a  :将后面名为 variable 的变量定义成为数组 (array) 类型
    -i  :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
    -x  :用法与 export 一样,就是将后面的 variable 变成环境变量;
    -r  :将变量配置成为 readonly 类型,该变量不可被更改内容,也不能 unset
    
    范例一:让变量 sum 进行 100+300+50 的加总结果
    [root@www ~]# sum=100+300+50
    [root@www ~]# echo $sum
    100+300+50  <==咦!怎么没有帮我计算加总?因为这是文字型态的变量属性啊!
    [root@www ~]# declare -i sum=100+300+50
    [root@www ~]# echo $sum
    450         

    21、

    • 变量类型默认为『字符串』,所以若不指定变量类型,则 1+2 为一个『字符串』而不是『计算式』。 所以上述第一个运行的结果才会出现那个情况的;
    • bash 环境中的数值运算,默认最多仅能到达整数形态,所以 1/3 结果是 0;

    22、如果需要非字符串类型的变量,那就得要进行变量的宣告才行

    23、

    将 sum 变成环境变量
    [root@www ~]# declare -x sum
    让 sum 变成非环境变量的自定义变量吧!
    [root@www ~]# declare +x sum  <== 将 - 变成 + 可以进行『取消』动作

    24、数组 (array) 变量类型

    范例:配置上面提到的 var[1] ~ var[3] 的变量。
    [root@www ~]# var[1]="small min"
    [root@www ~]# var[2]="big min"
    [root@www ~]# var[3]="nice min"
    [root@www ~]# echo "${var[1]}, ${var[2]}, ${var[3]}"
    small min, big min, nice min

    25、变量内容的删除:#和## 从前面开始删除, %和%%从后面开始删除

    • # :符合取代文字的『最短的』那一个;
    • ##:符合取代文字的『最长的』那一个;

    26、

    ${变量/旧字符串/新字符串}

    ${变量//旧字符串/新字符串}

    若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』

    若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』

    27、在某些时刻我们常常需要『判断』某个变量是否存在,若变量存在则使用既有的配置,若变量不存在则给予一个常用的配置。 

    new_var=${old_var-content}

    28、 

    变量配置方式 str 没有配置 str 为空字符串 str 已配置非为空字符串
    var=${str-expr} var=expr var= var=$str
    var=${str:-expr} var=expr var=expr var=$str
    var=${str+expr} var= var=expr var=expr
    var=${str:+expr} var= var= var=expr
    var=${str=expr} str=expr
    var=expr
    str 不变
    var=
    str 不变
    var=$str
    var=${str:=expr} str=expr
    var=expr
    str=expr
    var=expr
    str 不变
    var=$str
    var=${str?expr} expr 输出至 stderr var= var=$str
    var=${str:?expr} expr 输出至 stderr expr 输出至 stderr var=$str

    这个减号的测试并不会影响到旧变量的内容。 如果你想要将旧变量内容也一起替换掉的话,那么就使用等号 (=) 吧!

    29、history查看历史命令,!number运行响应序号的命令,!!运行上一个命令。

  • 相关阅读:
    可重入函数
    进程间通信的方法和实现
    Qt之Qprocess
    mysql学习(十二)内置函数
    mysql学习(十一)嵌套查询 排序 分组
    mysql学习(十)多表查询
    ubuntu 12.04 安装谷歌浏览器
    mysql学习(九)sql语句
    mysql学习(八)数据表类型-字符集
    mysql远程连接问题-http://www.cnblogs.com/jerome-rong/archive/2013/03/05/2944264.html
  • 原文地址:https://www.cnblogs.com/zczhangcui/p/10999048.html
Copyright © 2020-2023  润新知