bash功能特性一 变量

一、什么是shell

shell是为了使用户能够操作应用程序的接口程序。如经常使用的图形界面及命令行界面都是shell。下面来介绍一下bash这个shell的功能。

二、变量的概念

被命名的内存空间即为变量,Linux中内置了许多变量,我们可以通过修改这些变量的值还制定用户自己的bash环境。

1、显示变量

使用echo命令来读出变量的内容,PATH是变量的名称,在前面加上$表示读取变量的内容,否则只会显示字串本身,如下所示;

也可以使用下面的方式来读取变量的内容;

2、设置自定义变量

我们也可以自己来设置自定义变量,通过“=”号即可实现;

3、取消变量

三.变量的类型

Linux存在多种不同类型的变量,下面逐一介绍。

1、本地变量

只对当前shell进程有效,对其它shell进程和当前shell进程的子进程无效的变量;

变量的设置规则:

变量的命名应遵循以下原则:

1、只能包含字母语、数字和下划线,并且不能以数字开头;

2、不应该跟系统中已有的环境变量重名;

3、最好做到见名知义;

变量中的引用:

"":弱引用,里面的变量会被替换;

‘‘:强引用,里面的所有字符都是字面量,直接输出;

2、环境变量

环境变量是Linux系统中内置的变量,用于帮助用户设置提示符、文件查找的路径、语系等功能;环境变量作用于当前shell进程及其子进程,对其它的shell无效。

1)查看当前系统上的环境变量

(1)用evn查看环境变量

上面的结果中有些常用的环境变量说明如下:

HOSTNAME:主机名;

SHELL:当前环境中使用的shell程序;

HISTSIZE:记录历史命令的条数,默认为1000;

USER:当前用户名;

MAIL:当前用户的邮箱路径;

PATH:命令查找路径;

LANG:当前语系设置;

HOME:当前用户的家目录。

(2)使用export命令查看环境变量

(3)使用printenv命令查看环境变量

(4)使用set命令查看所有变量        

(5)将自定义变量转换成环境变量

脚本在执行时会启动一个子shell进程,而父进程就会处于睡眠状态,等子进程执行完成后再回到父进程继续执行;父进程处于睡眠状态时,子进程不会继承父进程的本地变量,只会继承环境变量,所以必须将脚本中涉及到的本地变量转换成环境变量才能顺利执行。

使用export命令来导出自定义变量为环境变量;

也可直接使用export命令来直接定义环境变量;

(6)修改环境变量

在命令行修改环境变量并不能永久生效,一旦退出shell修改就会失效。

与自定义变量的定义方式相同,可以直接为环境变量赋值;

也可以在环境变量后面追加内容;

自定义提示符

                 PS1定义了当前shell中的提示符信息,参数含义如下:

\u:当前用户名

\h:主机名

\H:FQDN,完整格式主机名

\w:当前工作目录的基名

\W:当前工作目录的绝对路径

\$:提示符

\t:显示时间

3、局部变量

对shell脚本中某代码片断有效:通常用于函数本地;

定义方法:local VARNAME=VALUE

4、位置变量

$1,$2,…,${10}

5、特殊变量

$?:上一个命令的执行状态返回值

$#:参数个数

$*:参数列表

[email protected]:参数列表

6、只读变量:

readonly VARNAME

四、变量的删除与替换

将路径赋值到变量p中;

${variable#word}:在variable中存储字串上,自左而右,查找第一次出现的word,删除字符开始至此word处的所有内容;

上面的结果表示从左向右查找第一次出现的/,并将其删除;

${variable##word}:在variable中存储字串上,自左而右,查找最后一次出现的word,删除字符开始至此word处的所有内容;

上面的结果表示从左向右查找最后一次出现的/,前面的*代表任何字符;

${variable%word}:在variable中存储字串上,自右而左,查找第一次出现的word,删除word开始到尾部的所有内容;

上面的结果表示从右向左查找第一个/,并将其后面的内容删除;

${variable%%word}:在variable中存储字串上,自右而左,查找最后一次出现的word,删除word开始到尾部的所有内容;

上面的结果表示从右向左查找最后一个/s,并将其后面的内容删除。

变量的查找替换:

${variable/pattern/substi}:将变量中第一次出现的pattern替换为substi;

将第一次出现的123替换为321;

${variable//pattern/substi}:将变量中出现的所有的pattern替换为substi;

${variable/#pattern/substi}:将变量中位于行首的pattern替换为substi;

上面的变量并没有被替换,因为23并是位于行首的字符;

从上面的结果看出只替换了行首的字符;

${variable/%pattern/substi}:将变量中位于行尾的pattern替换为substi;

pattern可以使用globbing中的元字符:*,?

变量的查找删除:

${variable/pattern}:删除pattern第一次匹配到的字符串;

${variable//pattern}:删除pattern所有匹配到的字符串;

${variable/#pattern}:删除pattern匹配到的行首的字符串;

${variable/%pattern}:删除pattern匹配到的行尾字符串;

大小写转换:

小写转大写:${variable^^}

大写转小写:${variable,,}

变量赋值操作:

${parameter:-word}:如果parameter为空或未定义,则返回为“word";否则,返回parameter的值;

因为变量p有值,直接显示变量p的的内容;

将变量p撤消,即显示表达式后面的内容;

${parameter:+word}:如果parameter为空或未定义,则不做任何操作;否则,返回word的值;

此表达式正上面的正好相反,将变量p赋值后显示表达式后面的字符,即tt;

${parameter:=word}:如果parameter为空或未定义,不但变量返回"word";而且将parameter赋值为word;

变量p中有值时,直接显示变量p的值,变量p不存在时,将tt赋值给变量p;

${parameter:offset:length}:如果将parameter偏移offset个字符,并截取length长度的字符

在上面的表达式中,设置了偏移3个字符,即从第4个字符开始显示,截取2个字符,所以结果为45;

${parameter:?word}:如果parameter为空或未定义,则将word做为错误信息显示,否则显示parameter的值;

为脚本使用配置文件,并确保某变量有可用值的方式:

variable=${variable:-default vaule}

时间: 2024-10-11 10:21:29

bash功能特性一 变量的相关文章

bash中的变量

1.bash中的变量: #命令set:显示所有变量. (1).本地变量:只对当前shell进程有效,对其子shell以及其它shell都无效. 定义本地变量:[set]变量名="Value",例animal=dog 引用本地变量:${变量名},其中{}通常省略,例echo $animal 撤销本地变量:unset 变量名,例unset animal (2).局部变量:只对局部代码有效 定义局部变量:local 变量名=变量值 (3).环境变量:当前shell进程以及其子shell都有效

bash的RANDOM变量生成的是真正的随机数吗

static void seedrand () { struct timeval tv; gettimeofday (&tv, NULL); sbrand (tv.tv_sec ^ tv.tv_usec ^ getpid ()); } 上述是bash中生成随机数的代码,处理是非常的简单,秒 (tv.tv_sec) 和微秒 (tv.tv_usec) 和进程 ID 的位进行异或操作来生成随机数. 由此生成的RANDOM变量是伪随机数,而且和伪随机数生成器相比,是采用非常简单的算法生成的. 译至:ht

Bash Shel:变量总结

1.变量:name=value 变量组成:变量名.指向的内存空间的某段空间的启始地址 变量替换:把变量名出现的位置替换为其所指向的内存空间中数据: 变量引用:${var_name}, $var_name 2.变量类型 变量类型--->变量内数值存储类型--->数据存储格式.表示数据范围.参与的运算 bash shell 弱类型语言 bash把所有变量统统视作字符型: bash不支持浮点类型 bash中的变量无需事先声明:相当于,把声明和赋值过程同时实现: 3.变量名命名 (1)变量名只能包含数

shell学习之常用bash内置变量

常用的Bash内置变量 1 BASH_COMMAND当前执行的命令 2 LINENO显示当前所在行号 /bin/bash echo "this is test about ARG LINENO" echo "line now in :$LINENO" 结果为 [[email protected] shell]# ./bash.sh this is test about ARG LINENO line now in :   4 方便调试 3 FUNCNAME[i]在第

BASH内置变量

BASH内置变量 (1).BASH 作用:bash的完整路径.默认为/bin/bash (2).BASH_ENV 作用:仅在非交互模式中适用.在执行shell脚本时,会先检查该变量是否指定了启动 脚本,若指定则先执行它指定的启动脚本. (3).BASH_VERSION 作用:bash的版本号 实例:echo $BASH_VERSION (4).CDPATH 作用:cd的搜索路径,多个路径用':'隔开 实例: CDPATH="/tmp/A/B:/var/log" (假设当前目录为/hom

Bash shell和变量详解

本文的结构:bash shell简介-->变量和变量操作.数组-->bash的环境配置文件分析 什么是shell: 操作系统是一组软件,用于控制整个硬件和管理系统活动,若直接使用操作系统,操作不当会导致系统崩溃,用户不可随意操作,所以通过"shell"将我们输入的命令与内核通信,让内核准确的控制硬件工作 shell是在操作系统上开发的应用程序,是用户可操作的最外层,也就是"shell"壳 什么是bash Bourne Again SHell,Bourne

bash的环境变量配置文件

日期: 2015年08月30日 bash的配置文件 bash的配置文件用来配置bash的使用环境,在系统中保存这诸多事先定义好的变量 bash的环境变量常见的有: PATH:命令搜索路径 HISTFILE:命令历史的保存位置 SHELL:当前用户使用的 HOME:当前用户的家目录 变量的类型: 本地变量:只对当前shell进程有效,对其子shell以及其它shell都无效: 定义变量: [set]Var_Name="Value" 引用变量: ${Var_Name} 撤销变量: unse

学习鸟哥私房菜--linux bash 的环境变量ps1设置

bash里边的变量ps1是用户平时的提示符,系统默认为[[email protected] 工作目录]$.关于ps1的相关介绍详见:http://www.cnblogs.com/starspace/archive/2009/02/21/1395382.html 文章里边介绍了要想ps1的修改在重启有效需要将它写入~/.bash_profile中,但是这是针对login shell的(即各种tty终端界面等),对于进入xwindow启动的命令行终端这样的nonlogin shell就不管用了,这是

玩转Bash脚本:变量基本概念及其初始化

总第2篇 基本概念 命名 注意以下规则: 只能包含字母.数字和下划线,并且不能以数字开头 大小写敏感 不能和系统变量重名 除此以外,如果要导出为全局变量,名称最好要全部大写.这只是一种习惯的约定,并非严格的约束. 类型 几乎所有的编程语言都有变量的概念,Bash当然也不例外.说道变量就少不了说一说类型.但与其他语言不同的是Bash属于无类型语言,如果强要说一种类型,可以认为都是字符串.说到这里,你可能会说,Bash里面也有整数类型吧,好像有整数的运算.但其是通过一些运算符,表达式或者命令将字符串