Linux——Bash

一、查询指令是否为 Bash shell 的内建命令: type




二、变量的取用与设定:echo, 变量设定规则, unset

可以利用 echo 这个指令来取用变量, 但是,变量在被取用时,前面必须要加上钱字号『 $ 』才行。


      

『设定』或者是『修改』 某个变量的内容 : 用『等号(=)』连接变量与他的内容

       

注:myname=VBird不能有空格。在 bash 当中,当一个变量名称尚未被设定时,预设的内容是『空』的。

变量的设定规则
1. 变量与变量内容以一个等号『=』来连结,如下所示:『myname=VBird』
2. 等号两边不能直接接空格符,如下所示为错误:『myname = VBird』或『myname=VBird Tsai』
3. 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:『2myname=VBird』
4. 变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但
    o 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
        『var="lang is $LANG"』则『echo $var』可得『lang is zh_TW.UTF-8』
    o 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
        『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』
5. 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符,如:
『myname=VBird\ Tsai』
6. 在一串指令的执行中,还需要藉由其他额外的指令所提供的信息时,可以使用反单引号『`指令`』或 『$(指
令)』。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本
的设定: 『version=$(uname -r)』再『echo $version』可得『3.10.0-229.el7.x86_64』
7. 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:
『PATH="$PATH":/home/bin』或『PATH=${PATH}:/home/bin』
8. 若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:『export PATH』
9. 通常大写字符为系统默认变量,自行设定变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;
10. 取消变量的方法为使用 unset :

『unset 变量名称』例如取消 myname 的设定:『unset myname』

注:『子程序』——在我目前这个 shell 的情况下,去启用另一个新的 shell ,新的那个shell 就是子程序啦!在一般的状态下,父程序的自定义变量是无法在子程序内使用的。但是透过export 将变量变成环境变量后,就能够在子程序底下应用了!


三、环境变量的功能

        环境变量可以帮我们达到很多功能,包括家目录的变换、提示字符的显示、执行文件搜寻的路径等等。

可以利用env 与 export 查询目前shell环境中有多少默认的环境变量。

1、用 env 观察环境变量与常见环境变量说明


2、用 set 观察所有变量 (含环境变量与自定义变量)

        一般来说,不论是否为环境变量,只要跟我们目前这个 shell 的操作接口有关的变量, 通常都会被
设定为大写字符,也就是说,『基本上,在 Linux 预设的情况中,使用{大写的字母}来设定的变量

一般为系统内定需要的变量』。

3、export: 自定义变量转成环境变量

子程序仅会继承父程序的环境变量, 子程序不会继承父程序的自定义变量!所以在原本 bash 的自定义变量在进入了子程序后就会消失不见,一直到你离开子程序并回到原本的父程序后,这个变量才会又出现!


4、影响显示结果的语系变量 (locale)

5、变量键盘读取、数组与宣告: read, array, declare

(1)要读取来自键盘输入的变量,就是用 read 这个指令


read 之后不加任何参数,直接加上变量名称,那么底下就会主动出现一个空白行等待你的输入(如范例一)。 如果加上 -t 后面接秒数,例如上面的范例二,那么 30 秒之内没有任何动作时, 该指令就会自动略过了~如果是加上 -p ,嘿嘿!在输入的光标前就会有比较多可以用的提示字符给我们参考!


(2)declare / typeset

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



由于在默认的情况底下, bash 对于变量有几个基本的定义:
     变量类型默认为『字符串』,所以若不指定变量类型,则 1+2 为一个『字符串』而不是『计算式』。 所以
上述第一个执行的结果才会出现那个情况的;

     bash 环境中的数值运算,预设最多仅能到达整数形态,所以 1/3 结果是 0;


(3)数组 (array) 变量类型

在 bash 里头,数组的设定方式是: var[index]=content


一般来说,建议直接以 ${数组} 的方式来读取。

6、与文件系统及程序的限制关系: ulimit

7、变量内容的删除、取代与替换 (Optional)

(1)变量内容的删除与取代




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

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

上面谈到的是『从前面开始删除变量内容』,那么如果想要『从后面向前删除变量内容』呢? 

这个时候就得使用百分比 (%) 符号了!


总结一下:


(2)变量的测试与内容替换

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






8、命令别名设定: alias, unalias

eg. alias lm='ls -al | more'

命令别名是『新创一个新的指令, 你可以直接下达该指令』的,至于变量则需要使用类似『 echo 』指令才能够呼叫出变量的内容!

9、历史命令:history


历史命令还有一个问题,那就是无法记录指令下达的时间。


10、通配符与特殊符号


11、命令执行的判断依据: ; , &&, ||

(1)cmd ; cmd (不考虑指令相关性的连续指令下达)

希望可以一次执行多个指令,例如在关机的时候我希望可以先执行两次 sync 同步化写入磁盘后才 shutdown 计算机.

sync; sync; shutdown -h now

(2)$? (指令回传值) 与 && 或 ||

若前一个指令执行的结果为正确,在 Linux 底下会回传一个 $? = 0 的值

两个 & 之间是没有空格的!那个 | 则是 [Shift]+[\] 的按键结果。


例:(1)先判断一个目录是否存在; (2)若存在才在该目录底下建立一个文件。





12、管线命令 (pipe) |

管线命令使用的是『 | 』这个界定符号。

管线命令主要有两个比较需要注意的地方:
 管线命令仅会处理 standard output,对于 standard error output 会予以忽略

 管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。

(1)撷取命令: cut, grep

撷取讯息通常是针对『一行一行』来分析的, 并不是整篇讯息分析的。


cut 是将一行讯息当中,取出某部分我们想要的,而 grep 则是分析一行讯息

    例: last命令用于显示系统开机以来获是从每月初登入者的讯息。


13、排序命令: sort, wc, uniq


排序完成了,想要将重复的资料仅列出一个显示——uniq


wc命令用于计算字数。利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。



14、字符转换命令: tr, col, join, paste, expand

(1)tr 可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换

(2)col

(3)join——处理两个文件之间的数据,两个文件当中,有 "相同数据" 的那一行,才将他加在一起

在使用 join 之前,你所需要处理的文件应该要事先经过排序 (sort) 处理

(4)paste

相对于 join 必须要比对两个文件的数据相关性, paste 就直接『将两行贴在一起,且中间以 [tab] 键隔开』

(5)expand——将 [tab] 按键转成空格键


15、分区命令: split




16、参数代换: xargs——产生某个指令的参数

使用 xargs 的原因是, 很多指令其实并不支持管线命令,因此我们可以透过 xargs 来提供该指令引用 standard input 之用!


本文算是《鸟哥的Linux私房菜》的一个学习笔记和记录吧。


猜你喜欢

转载自blog.csdn.net/u012114090/article/details/80658532