首页 > 代码库 > 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)