渡人自渡 发表于 2018-8-27 06:11:02

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
  例
  $ exportb='hello'
  $ echo $b
  hello
  $ bash
  $ echo $b
  hello
  $
  declare:
  -a:声明索引数组(如果支持)
  -A:声明关联数组(如果支持)
  -i:声明整形变量;
  -l:声明变量并将变量值转换为小写字母;
  -u:声明变量并将变量值转换为大写字母;
  -x:声明变量并将其导出为环境变量(全局变量);
  -r:设置只读变量,且无法使用unset撤销,只能关闭bash;
  例
  $ declare-l s='HELLO'
  $ echo $s
  hello
  $ declare-u s='hello'
  $ echo $s
  HELLO
  查看环境变量:
  set:
  export:
  env:
  声明局部变量:
  local VARNAME=VALUE(用于函数,仅仅只在函数的代码段中有效,当函数调用完毕则失效)
  配置文件:
  通用配置文件:/etc/bashrc,/etc/profile
  私人配置文件:~/.bashrc,~/.bash_profile
  将变量放入配置文件中才是永久生效的;
  注意:一般定义变量都是先做先用,并不需要改配置文件,如果修改声明变量,有可能会造      成系统漏洞,得不偿失,所以没有不要就不要改;

页: [1]
查看完整版本: Linux系统Bash(Shell)基础知识(1)