首页 > 代码库 > Linux系统Bash(Shell)基础知识(1)

Linux系统Bash(Shell)基础知识(1)

  上篇博文为大家介绍了关于shell程序设计的的一些特性,即命令别名,命令历史,快捷键,命令补全,命令行展开,命令执行结果,转义字符,通配符,IO重定向,管道等操作;这次继续给大家介绍关于shell程序设计的另一大特性——变量;

  shell程序中采用变量存放字符串,shell变量比C语言中的变量简单得多,没有众多存储类及类型的限制,也不需要预先定义,然后才能赋值,可以在使用时“边定义,边赋值”。

  shell有三类变量,环境变量,临时变量以及本地变量,环境变量是永久形变量,不会随着shell脚本的结束而消失,而临时变量是shell程序内部定义的,其适用范围仅限于定义它的程序,出了本程序后便不能使用;

  程序=指令+数据

  数据:文件系统中管理的那些文件,存储在内存里的数据称之为变量

  变量:一段连续的内存空间;为这一段内存空间取名为变量名;在这段内存空间中所存储的设备称为 变量值;

  =:赋值操作符

  赋值方法:VARNAME=VALUE(中间不加空格)

  变量名=字符串

  例如

  myfile=/usr/meng中的myfile是变量名,=是赋值号,字符串/usr/meng是赋予变量的值。在等号两边是没有空格的;

  VARNAME的命名规范:

  1.只能以字母或下划线”_”开头,不能使用数字,后面可以是任意字母数字和下划线;

  2.大小写严格区分;

  3.见名知意;

  4.书写规范

  1)   全大写:FILES

  2)   驼峰式:MyFile(每一个单词的开头为大写)

  5.不能与已知变量名相同(否则相当于替换已有变量名)

  根据不同的编程语言,变量可以分为两类:

  强变量:

  必须要在使用前先声明,而且要声明变量的类型;严格区分变量的类型;

  弱变量:可以随时使用随时声明,甚至可以不声明即使用;不对变量类型做硬性要求,如果没有指明变量类型,统一按照字符型对待;

  bash的变量即为弱变量;

  c c++java等均为强变量;


  引用变量的值:$(VARNAME)-->$VARNAME(有些特殊的场景必须写花括号)也称为变量替换;

  在程序中使用变量的值时,要在变量名前面加上一个$字符,他告诉shell,要进行变量值替换;

  例

  #dir=/usr/meng

  #echo $dir

  #/usr/meng(显示结果)

  命令替换:

  以两种形式可以将一个命令的执行结果赋值给变量。

  一种形式是:

  #VARNAME=`命令表`

  例

  $dir=`pwd`

  另一种形式:

  #VARNAME=$(命令表)

  例

  $dir=$(pwd) 


  bash的变量种类:

  全局变量(环境变量):主要指作用范围,作用范围是整个shell进程,包括其子shell;

  本地变量:作用范围仅仅只是登陆的shell;不包括子shell;

  局部变量:作用范围仅仅只是当前的程序段一般用于函数;

  默认全局变量:

  位置参数变量:表明这个程序所调用程序的位置;$1,$2,$3。。。$n

  特殊变量:

          $?,$$,$#,$@,$*…

  $?:展开为最近一次所执行命令的状态返回值(退出状态)

  $#:位置参数的个数(以十进制表示);

  $*:从1开始连续编写所有的位置参数,当时用双引号来展开时,它展开为以特殊变量“IFS”的第一个字符分隔得值;用其显示的内容是很多个不同的值;

  $@:从1开始连续编写所有的位置参数,当时用双引号来展开时,它展开为一个单独的字符串;

  $$:展开为当前shell的进程标识符;

  $0:展开为shell或shell脚本的文件名;

  例

  #echo$0

  -bash

变量的使用:

     变量的赋值:VARNAME=‘VALUE’(属于本地变量)

   撤销变量:#unset VARNAME

   声明环境变量:

            export VARNAME(导出,可以给所有子shell应用)

            export VARNAME=VALUE

     

            [wjq@localhost ~]$ exportb=‘hello‘

            [wjq@localhost ~]$ echo $b

            hello

            [wjq@localhost ~]$ bash

            [wjq@localhost ~]$ echo $b

            hello

            [wjq@localhost ~]$

    declare:

          -a:声明索引数组(如果支持)

          -A:声明关联数组(如果支持)

        -i:声明整形变量;

          -l:声明变量并将变量值转换为小写字母;

          -u:声明变量并将变量值转换为大写字母;

          -x:声明变量并将其导出为环境变量(全局变量);

          -r:设置只读变量,且无法使用unset撤销,只能关闭bash;

       例

[wjq@localhost ~]$ declare-l s=‘HELLO‘

[wjq@localhost ~]$ echo $s

hello

[wjq@localhost ~]$ declare-u s=‘hello‘

[wjq@localhost ~]$ echo $s

HELLO

 

查看环境变量:

set:

export:

env:

 

声明局部变量:

local VARNAME=VALUE(用于函数,仅仅只在函数的代码段中有效,当函数调用完毕则失效)

 

配置文件:

       通用配置文件:/etc/bashrc,/etc/profile

       私人配置文件:~/.bashrc,~/.bash_profile

               将变量放入配置文件中才是永久生效的;

       注意:一般定义变量都是先做先用,并不需要改配置文件,如果修改声明变量,有可能会造        成系统漏洞,得不偿失,所以没有不要就不要改; 

          



  



Linux系统Bash(Shell)基础知识(1)