linux学习之十、变量的取用与配置:echo, 变量配置守则, unset

vim





vim 的环境设定参数

:set nu

:set nonu 就是设定与取消行号啊!





:set hlsearch

:set nohlsearch hlsearch 就是 high light search(高亮度搜寻)。 这个就是设定是否将搜寻的字符串反白的设定值。默认值是 hlsearch





:set autoindent

:set noautoindent 是否自动缩排?autoindent 就是自动缩排。





:set backup 是否自动储存备份档?一般是 nobackup 的, 如果设定 backup 的话,那么当你更动任何一个档案时,则源文件会被另存成一个档名为 filename~ 的档案。

 举例来说,我们编辑 hosts ,设定 :set backup ,那么当更动 hosts 时,在同目录下,就会产生 hosts~ 文件名的档案,记录原始的 hosts 档案内容





:set ruler 还记得我们提到的右下角的一些状态栏说明吗? 这个 ruler 就是在显示或不显示该设定值的啦!





:set showmode 这个则是,是否要显示 --INSERT-- 之类的字眼在左下角的状态栏。





:set backspace=(012) 一般来说, 如果我们按下 i 进入编辑模式后,可以利用退格键 (backspace) 来删除任意字符的。 但是,某些 distribution 则不许如此。

此时,我们就可以透过 backspace 来设定啰~ 当 backspace 为 2 时,就是可以删除任意值;0 或 1 时,仅可删除刚刚输入的字符, 而无法删除原本就已经存在的文字了!





:set all 显示目前所有的环境参数设定值。





:set 显示与系统默认值不同的设定参数, 一般来说就是你有自行变动过的设定参数啦!





:syntax on





:syntax off 是否依据程序相关语法显示不同颜色? 举例来说,在编辑一个纯文本档时,如果开头是以 # 开始,那么该行就会变成蓝色。 如果你懂得写程序,那么这个 

:syntax on 还会主动的帮你除错呢!但是, 如果你仅是编写纯文本档案,要避免颜色对你的屏幕产生的干扰,则可以取消这个设定 。





:set bg=dark





:set bg=light 可用以显示不同的颜色色调,预设是『 light 』。如果你常常发现批注的字体深蓝色实在很不容易看, 那么这里可以设定为 dark 喔!试看看,会有不同的样式呢!









[root@www ~]# type [-tpa] name

选项与参数:

    :不加任何选项与参数时,type 会显示出 name 是外部命令还是 bash 内建命令

-t  :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:

      file    :表示为外部命令;

      alias   :表示该命令为命令别名所配置的名称;

      builtin :表示该命令为 bash 内建的命令功能;

-p  :如果后面接的 name 为外部命令时,才会显示完整文件名;

-a  :会由 PATH 变量定义的路径中,将所有含 name 的命令都列出来,包含 alias





范例一:查询一下 ls 这个命令是否为 bash 内建?

[root@www ~]# type ls













范例:如果命令串太长的话,如何使用两行来输出?

[vbird@www ~]# cp /var/spool/mail/root /etc/crontab \

> /etc/fstab /root





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

变量的取用与配置:echo, 变量配置守则, unset









变量的取用: echo

echo $HOME 或者是 echo ${HOME}









配置变量





[root@www ~]# echo $myname

       <==这里并没有任何数据~因为这个变量尚未被配置!是空的!

[root@www ~]# myname=VBird

[root@www ~]# echo $myname

VBird  <==出现了!因为这个变量已经被配置了!









变量的配置守则





变量与变量内容以一个等号『=』来连结,如下所示: 

『myname=VBird』





等号两边不能直接接空格符,如下所示为错误: 

『myname = VBird』或『myname=VBird Tsai』





变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误: 

『2myname=VBird』





变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但

双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:

『var="lang is $LANG"』则『echo $var』可得『lang is en_US』

单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:

『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』





可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;





在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 

例如想要取得核心版本的配置:

『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』





若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:

『PATH="$PATH":/home/bin』





若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:

『export PATH』





通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;





取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的配置:

『unset myname』





例子:

范例一:配置一变量 name ,且内容为 VBird

[root@www ~]# 12name=VBird

-bash: 12name=VBird: command not found  <==屏幕会显示错误!因为不能以数字开头!

[root@www ~]# name = VBird            <==还是错误!因为有空白!

[root@www ~]# name=VBird              <==OK 的啦!





范例二:承上题,若变量内容为 VBird's name 呢,就是变量内容含有特殊符号时:

[root@www ~]# name=VBird's name  

# 单引号与双引号必须要成对,在上面的配置中仅有一个单引号,因此当你按下 enter 后,

# 你还可以继续输入变量内容。这与我们所需要的功能不同,失败啦!

# 记得,失败后要复原请按下 [ctrl]-c 结束!

[root@www ~]# name="VBird's name"    <==OK 的啦!

# 命令是由左边向右找→,先遇到的引号先有用,因此如上所示,单引号会失效!

[root@www ~]# name='VBird's name'    <==失败的啦!

# 因为前两个单引号已成对,后面就多了一个不成对的单引号了!因此也就失败了!

[root@www ~]# name=VBird\'s\ name     <==OK 的啦!

# 利用反斜杠 (\) 跳脱特殊字符,例如单引号与空格键,这也是 OK 的啦!





范例三:我要在 PATH 这个变量当中『累加』:/home/dmtsai/bin 这个目录

[root@www ~]# PATH=$PATH:/home/dmtsai/bin

[root@www ~]# PATH="$PATH":/home/dmtsai/bin

[root@www ~]# PATH=${PATH}:/home/dmtsai/bin

# 上面这三种格式在 PATH 里头的配置都是 OK 的!但是底下的例子就不见得啰!





范例四:承范例三,我要将 name 的内容多出 "yes" 呢?

[root@www ~]# name=$nameyes  

# 知道了吧?如果没有双引号,那么变量成了啥?name 的内容是 $nameyes 这个变量!

# 呵呵!我们可没有配置过 nameyes 这个变量吶!所以,应该是底下这样才对!

[root@www ~]# name="$name"yes

[root@www ~]# name=${name}yes  <==以此例较佳!





范例五:如何让我刚刚配置的 name=VBird 可以用在下个 shell 的程序?

[root@www ~]# name=VBird

[root@www ~]# bash        <==进入到所谓的子程序

[root@www ~]# echo $name  <==子程序:再次的 echo 一下;

       <==嘿嘿!并没有刚刚配置的内容喔!

[root@www ~]# exit        <==子程序:离开这个子程序

[root@www ~]# export name

[root@www ~]# bash        <==进入到所谓的子程序

[root@www ~]# echo $name  <==子程序:在此运行!

VBird  <==看吧!出现配置值了!

[root@www ~]# exit        <==子程序:离开这个子程序

什么是『子程序』呢?就是说,在我目前这个 shell 的情况下,去激活另一个新的 shell ,新的那个 shell 就是子程序啦!在一般的状态下,父程序的自定义变量是无法在子程序内使用的。

但是透过 export 将变量变成环境变量后,就能够在子程序底下应用了









范例六:如何进入到您目前核心的模块目录?

[root@www ~]# cd /lib/modules/`uname -r`/kernel

[root@www ~]# cd /lib/modules/$(uname -r)/kernel





uname -r:获取系统版本号









范例七:取消刚刚配置的 name 这个变量内容

[root@www ~]# unset name









例题:

在变量的配置当中,单引号与双引号的用途有何不同?

答:

单引号与双引号的最大不同在于双引号仍然可以保有变量的内容,但单引号内仅能是一般字符 ,而不会有特殊符号。

我们以底下的例子做说明:假设您定义了一个变量, name=VBird ,现在想以 name 这个变量的内容定义出 myname 显示 VBird its me 这个内容,要如何订定呢?

[root@www ~]# name=VBird

[root@www ~]# echo $name

VBird

[root@www ~]# myname="$name its me"

[root@www ~]# echo $myname

VBird its me

[root@www ~]# myname='$name its me'

[root@www ~]# echo $myname

$name its me













例题:

在命令下达的过程中,反单引号( ` )这个符号代表的意义为何?

答:

在一串命令中,在 ` 之内的命令将会被先运行,而其运行出来的结果将做为外部的输入信息!例如 uname -r 会显示出目前的核心版本,而我们的核心版本在 /lib/modules 里面,

因此,你可以先运行 uname -r 找出核心版本,然后再以『 cd 目录』到该目录下,当然也可以运行如同上面范例六的运行内容啰。 





另外再举个例子,我们也知道, locate 命令可以列出所有的相关文件档名,但是,如果我想要知道各个文件的权限呢?举例来说,我想要知道每个 crontab 相关档名的权限:

[root@www ~]# ls -l `locate crontab`









例题:

若你有一个常去的工作目录名称为:『/cluster/server/work/*_2005/003/』,如何进行该目录的简化?

答:

在一般的情况下,如果你想要进入上述的目录得要『cd /cluster/server/work/*_2005/003/』, 以鸟哥自己的案例来说,

鸟哥跑数值模式常常会配置很长的目录名称(避免忘记),但如此一来变换目录就很麻烦。 此时,鸟哥习惯利用底下的方式来降低命令下达错误的问题:

[root@www ~]# work="/cluster/server/work/*_2005/003/"

[root@www ~]# cd $work

上一篇:利用python脚本(xpath)抓取数据


下一篇:二十八、oracle 视图