shell实战:内置(built-in)变量

简介:

shell领域内,变量的作用不言而喻。

内置变量,是不需要在程序中声明,就自动存在的,随时可以访问。

  Shell 的环境变量分为 set, env 两种,其中 set 变量可以通过 export 工具导入到 env 变量中。其中,set 是显示设置shell变量,仅在本 shell 中有效;env 是显示设置用户环境变量 ,仅在当前会话中有效。换句话说,set 变量里包含了 env 变量,但 set 变量不一定都是 env 变量。这两种变量不同之处在于变量的作用域不同。显然,env 变量的作用域要大些,它可以在 subshell 中使用。

SHELL

[root@hadoop1 shells]# echo $SHELL

/bin/bash

BASH 显示bash的完整路径名

[root@hadoop1 shells]# echo $BASH

/bin/bash

BASH_VERSION bash的版本

[root@hadoop1 shells]# echo $BASH_VERSION

4.1.2(1)-release

HISTCMD 在历史指令中的排列编号 [root@hadoop1 shells]# echo $HISTCMD

1045

HISTCONTROL 控制指令是否存入历史脚本文件中。

[root@hadoop1 shells]# echo $HISTCONTROL

ignoredups

HISTFILE 设定历史脚本文件的路径文件名

[root@hadoop1 shells]# echo $HISTFILE

/root/.bash_history

HISTFILESIZE 设定历史脚本文件存储指令的最大行数。 [root@hadoop1 shells]# echo $HISTFILESIZE

1000

HISTIGNORE 不存入历史脚本文件的指令样式
HOME 定用户的家目录位置

[root@hadoop1 shells]# echo $HOME

/root

HOSTNAME 显示主机名

[root@hadoop1 shells]# echo $HOSTNAME

hadoop1

HOSTTYPE 显示主机形态。 [root@hadoop1 shells]# echo $HOSTTYPE

i386

MACHTYPE 描述主机形态的GNU格式 [root@hadoop1 shells]# echo $MACHTYPE

i386-redhat-linux-gnu

MAIL 显示当前用户邮件目录 [root@hadoop1 shells]# echo $MAIL

/var/spool/mail/root

MAILCHECK 每隔多久就检查一次邮件

[root@hadoop1 shells]# echo $MAILCHECK

60

PATH 命令的搜寻路径

[root@hadoop1 shells]# echo $PATH

/usr/lib/qt-3.3/bin:/usr/local/sbin:.....

PPID 父进程的进程编号。

[root@hadoop1 shells]# echo $PPID

2850

RANDOM 随机函数

[root@hadoop1 shells]# echo $RANDOM

29446

REPLY select和read没有设定读取变量时,默认的变量名称为REPLY。
UID 用户ID

[root@hadoop1 shells]# echo $UID

0

USER 用户名

[root@hadoop1 shells]# echo $USER    

root

LOGNAME 登录用户的用户名

[root@hadoop1 shells]# echo $LOGNAME

root

PS1

PS2

提示符

[root@hadoop1 shells]# echo $PS1

[\u@\h \W]\$

[root@hadoop1 shells]# echo $PS2

>

TERM 终端类型

[root@hadoop1 shells]# echo $TERM

vt100

PWD 当前目录

[root@hadoop1 shells]# echo $PWD 

/u02/shells

LANG 设置当前语系的名称

[root@hadoop1 shells]# echo $LANG

en_US

[root@hadoop1 shells]# echo $LANGUAGE

en_US

SECONDS 显示当前shell的启动的时间
TMOUT 若该变量的值大于0的话,则bash会在等待TMOUT秒后还没有任何操作就会自动结束当前的bash shell.


函数范围变量


$1~$n

位置参数

传入程序或函数式的参数,第一个参数$1,第二参数$2


$0 执行程序的名称

$*

代表所有的位置参数,并且视为一个字符串。

$@

代表所有的位置参数,但$@代表各位置参数组成的串行。

$#

位置参数的个数。

$?

上一条命令执行结束后的传回值。通常0代表执行成功,非0代表执行有误。

$$

目前bash shell的进程编号。

$_

a. script执行时,bash的绝对路径。

b. 上一个命令执行时,最后一个位置参数,如上一个命令是:test.sh ABC 123 xyz,则$_的值为’xyz’。

c. 检查邮件时,$_的值为邮件文件名。


特殊的IFS

 Shell 脚本中有个变量叫 IFS(Internal Field Seprator) ,内部域分隔符.IFS包含系列空白字符

1
2
3
4
5
echo  $IFS  
   
echo  "$IFS"  | od -b  
0000000 040 011 012 012  
0000004

表格 B-4. 参数替换和扩展

表达式 含义
${var} 变量var的值, 与$var相同


${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 *
${var:-DEFAULT} 如果var没有被声明或其值为空, 那么就以$DEFAULT作为其值 *


${var=DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 *
${var:=DEFAULT} 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *


${var+OTHER} 如果var声明了, 那么其值就是$OTHER, 否则就为null字符串
${var:+OTHER} 如 果var被设置了, 那么其值就是$OTHER, 否则就为null字符串(修改现有值)


${var?ERR_MSG} 如果var没 被声明, 那么就打印$ERR_MSG *
${var:?ERR_MSG} 如果var没 被设置, 那么就打印$ERR_MSG *


${!varprefix*} 匹配之前所有以varprefix开头进行声明的变量
${!varprefix@} 匹配之前所有以varprefix开头进行声明的变量


表格 B-5. 字符串操作

表达式 含义
${#string} $string的长度


${string:position} $string中, 从位置$position开始提取子串
${string:position:length} $string中, 从位置$position开始提取长度为$length的子串


${string#substring} 从 变量$string的开头, 删除最短匹配$substring的子串
${string##substring} 从 变量$string的开头, 删除最长匹配$substring的子串
${string%substring} 从 变量$string的结尾, 删除最短匹配$substring的子串
${string%%substring} 从 变量$string的结尾, 删除最长匹配$substring的子串


${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring
${string//substring/replacement} 使 用$replacement, 代替所有匹配的$substring
${string/#substring/replacement} 如 果$string前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
${string/%substring/replacement} 如果$string后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring




expr match "$string" '$substring' 匹配$string开头的$substring* 的长度
expr "$string" : '$substring' 匹 配$string开头的$substring* 的长度
expr index "$string" $substring $string中匹配到的$substring的第一个字符出现的位置
expr substr $string $position $length $string中 从位置$position开始提取长度为$length的子串
expr match "$string" '\($substring\)' $string的 开头位置提取$substring*
expr "$string" : '\($substring\)' $string的 开头位置提取$substring*
expr match "$string" '.*\($substring\)' $string的 结尾提取$substring*
expr "$string" : '.*\($substring\)' $string的 结尾提取$substring*



本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/1914716,如需转载请自行联系原作者

相关文章
|
5月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
536 2
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
409 20
|
移动开发 监控 安全
【实战指南】从零构建嵌入式远程Shell,提升跨地域协作效率
构建嵌入式远程Shell的文章概述: - 目标:解决嵌入式软件测试中的远程调试难题,提供轻量级解决方案。 - 功能:包括远程交互、命令执行与反馈,强调多客户端并发连接和稳定性。 - 设计:基于Socket服务端架构,使用I/O多路复用和popen函数,确保命令执行与结果反馈。 - 需求:支持命令解析、执行和结果回传,考虑网络不稳定情况下的连接保持。 - 安全性:仅限内部调试,未详细讨论加密等安全措施。 - 实现:关注点在Socket服务端程序,包括监听、数据过滤和命令处理。 - 测试:通过 Telnet 和Windows网络助手验证连接和命令执行功能。
559 139
|
存储 Java Shell
Shell 变量
10月更文挑战第2天
206 1
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
Java Shell Linux
Shell 变量设置
Shell设置变量
235 5
|
分布式计算 大数据 Shell
MaxCompute产品使用合集之odps shell如何将ech变量的结果集合写入文件,并且指定服务器的位置
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
243 10
|
Shell
[shell]在curl测试的data参数中引用变量
[shell]在curl测试的data参数中引用变量
719 1
|
Java Shell Linux
Shell 变量设置25-1
Shell编程语言是一种非类型的解释型语言,无需像C++/Java那样事先声明变量。通过赋值即可定义变量,在Linux支持的所有Shell中均适用。变量分为局部变量与环境变量,前者仅限于定义脚本内使用,后者可在其派生的子进程中使用。常见系统变量如$0表示当前程序名称,$n表示第n个参数(n=1,2,...,9),$*代表所有参数,$#代表参数个数,$?表示命令执行后的状态(0为成功),$UID为当前用户ID,$PWD表示当前目录。定义变量如`A=123`,
152 0
|
Shell Linux
Linux环境变量之shell中export定义全局变量和echo 变量的区别
Linux环境变量之shell中export定义全局变量和echo 变量的区别