返回顶部
首页 > 资讯 > 精选 >Shell脚本中常用的内置变量有哪些
  • 587
分享到

Shell脚本中常用的内置变量有哪些

2023-06-15 17:06:58 587人浏览 独家记忆
摘要

这篇文章主要讲解了“shell脚本中常用的内置变量有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell脚本中常用的内置变量有哪些”吧!在 Bash 解释器中,内置了许多变量,这些变

这篇文章主要讲解了“shell脚本中常用的内置变量有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell脚本中常用的内置变量有哪些”吧!

在 Bash 解释器中,内置了许多变量,这些变量的功能是解释器自带的,我们在编写shell脚本时如果能灵活的使用它们,对脚本的编写效率以及差错大有帮助,  下面一一介绍这些变量

$FUNCNAME、$LINENO、$PWD

FUNCNAME和LINENO 变量经常用于脚本的调试

FUNCNAME 表示当前函数的名字,作用范围仅限函数中使用,在函数外无值

LINENO 表示当前所在脚本中变量出现在的行号

PWD 表示当前目录, 对应于 pwd命令

现有个脚本 a.sh 内容如下

1 #!/bin/bash  2  3   4 testa()  5 {  6  echo 'func='$FUNCNAME,$LINENO  7 }  8   9  10 testa 11  12 echo 'lineno:'$LINENO 13 echo 'xx:'$FUNCNAME 14 echo 'curpath:'$PWD

执行 ./a.sh 命令, 输出如下

[tt@ecs-Centos-7 ~]$ ./a.sh  func=testa,6 lineno:12 xx: curpath:/home/tt

在 testa 函数中 FUNCNAME 变量值是 testa,也即函数名字,在函数外部无值

LINENO 变量无论是在函数中还是函数外,都表示当前所在的行号

$$、$PPID

这两个变量依次表示当前进程ID和父进程ID

现有 a.sh 脚本,内容如下

sleep 20 睡眠语句是为了让执行脚本进程暂缓退出,在另一个终端中验证输出的结果

#!/bin/bash #set -u  echo 'cur pid:'$$ echo 'parent pid:'$PPID sleep 20

在当前终端执行 ./a.sh,结果如下

[tt@ecs-centos-7 ~]$ ./a.sh  cur pid:13095 parent pid:12982

在执行a.sh的脚本进程退出之前,打开另一个终端,执行 ps -o pid,ppid,time,cmd -p 12982,13095  命令,结果如下

[tt@ecs-centos-7 ~]$ ps -o pid,ppid,time,cmd -p 12982,13095   PID  PPID     TIME CMD 12982 12981 00:00:00 -bash 13095 12982 00:00:00 /bin/bash ./a.sh

从上面的结果可以看出, 执行 ./a.sh 命令之后,$$ 变量表示的是 执行a.sh脚本的进程ID 13095 ,而 12982  是它的父进程ID,也即是 PPID变量的值,它是当前bash的实例

$0,$1,$2...$n、$#

$# 表示从命令行传入脚本的参数数量

$0,$1,$2...$n 是从命令行传递到脚本的参数 $0 是脚本本身的名字 $1 是第一个参数 $2 是第二个参数,依此类推 $n  是第n个参数

第十个参数及以后的参数必须要用大括号括起来,例如: ${10}、${11}、${12} 依次表示第十个变量、第十一个变量、第十二个变量

$*、$@

都表示位置参数,不过它们之间也有些不同点

使用 $* 时,如果加上双引号,即 "$* " 的形式,那所有位置的参数会被当作一个单词来处理,如果不包含双引号,即 $*  的形式,则每个位置的参数都被当作一个独立的单词来处理

而对于 $@,无论是否加上双引号,每个位置的参数都被当作一个独立的单词来处理

现有c.sh, 内容如下

#!/bin/bash  cnt=1 echo 'test 1111'  for var in "$*" do    echo "arg$cnt="$var    let "cnt+=1" done echo  cnt=1 echo 'test 2222' for var in $* do   echo "arg$cnt="$var   let "cnt+=1" done echo  cnt=1 echo 'test 3333' for var in "$@" do   echo "arg$cnt="$var   let "cnt+=1" done echo  cnt=1 echo "test 4444" for var in $@ do  echo "arg$cnt="$var  let "cnt+=1" done

执行 ./c.sh 1 2 3,结果如下

[root@ecs-centos-7 ~]# ./c.sh 1 2 3 test 1111 arg1=1 2 3  test 2222 arg1=1 arg2=2 arg3=3  test 3333 arg1=1 arg2=2 arg3=3  test 4444 arg1=1 arg2=2 arg3=3

从上面的结果可以看出,对于 $* 来说,加了双引号之后所有位置参数就会被视为一个单词

对于 $@ 来说,是否加双引号,结果都是一样的

所以,仅在使用双引号时,$*和 $@ 才会有差异

$?

命令、函数或者脚本的退出状态,在判断命令的执行结果或者函数的调用结果时很有用处

现有 e.sh 和 f.sh 测试脚本

e.sh 脚本

#!/bin/bash  test_func() {   if [[ $1 -eq 10 ]]; then         return 5   fi   return 6 }   if [ $# -ge 1 ]; then    name="$1"    shift 1    $name "$@" fi

f.sh 脚本

#!/bin/bash   sh e.sh test_func 3 echo 'exit code1:'$?  sh e.sh test_func 10 echo 'exit code2:'$?  test -f $PWD/xx.txt echo 'exit code3:'$?  test -f $PWD/e.sh echo 'exit code4:'$?

执行 ./f.sh 命令,结果如下

[root@ecs-centos-7 ~]# ./f.sh  exit code1:6 exit code2:5 exit code3:1 exit code4:0

脚本 e.sh 中 test_func 函数功能是:当参数等于10时,退出状态为 5,否则为 6

sh e.sh test_func 3 命令会调用 e.sh 脚本中的 test_func函数,传入参数是 3,所以退出状态为 6,同理可知, sh  e.sh test_func 10 命令的退出状态是 5

linux中,命令执行成功,退出状态为 0 ,失败则为非 0

test -f $PWD/xx.txt 命令是检查当前目录是否存在 xx.txt 文件,因当前目录并不存在 xx.txt,所以命令执行失败,退出状态为非  0

由于e.sh 存在于当前目录下,所以 test -f $PWD/e.sh 命令执行成功,退出状态为 0

$IFS

此变量用于 Bash 识别字符串或单词边界,默认值是空格,脚本中根据需要可以修改此变量的值

现有 b.sh脚本,内容如下

#!/bin/bash  va="a:b:c" vb="x-y-z" vc="e,f,g"  IFS=":" echo 'va:'$va echo 'vb:'$vb echo 'vc:'$vc  echo  IFS="-" echo 'va:'$va echo 'vb:'$vb echo 'vc:'$vc  echo  IFS="," echo 'va:'$va echo 'vb:'$vb echo 'vc:'$vc

执行 ./b.sh 结果如下

[tt@ecs-centos-7 ~]$ ./b.sh  va:a b c vb:x-y-z vc:e,f,g  va:a:b:c vb:x y z vc:e,f,g  va:a:b:c vb:x-y-z vc:e f g

从结果可以看出,当 $IFS 为 : 时,字符串 "a:b:c"被解析成 a b c

当 $IFS 为 - 时,字符串 "x-y-z"被解析成 x y z

当 $IFS 为 , 时,字符串 "e,f,g"被解析成 e f g

$HOME、$USER、$UID、$GROUPS

HOME:   用户home目录 USER:   当前用户名 UID:    当前用户ID GROUPS: 当前用户组ID
[tt@ecs-centos-7 ~]$ echo $HOME /home/tt [tt@ecs-centos-7 ~]$ echo $USER tt [tt@ecs-centos-7 ~]$ echo $UID 1003 [tt@ecs-centos-7 ~]$ echo $GROUPS 1003

$HOSTTYPE、$MACTYPE、$OSTYPE

这些变量都表示系统硬件

[tt@ecs-centos-7 ~]$ echo $HOSTTYPE x86_64 [tt@ecs-centos-7 ~]$ echo $MacHTYPE x86_64-redhat-linux-gnu [tt@ecs-centos-7 ~]$ echo $OSTYPE linux-gnu

感谢各位的阅读,以上就是“Shell脚本中常用的内置变量有哪些”的内容了,经过本文的学习后,相信大家对Shell脚本中常用的内置变量有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Shell脚本中常用的内置变量有哪些

本文链接: https://lsjlt.com/news/281153.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • shell 脚本中有哪些常用的内置变量
    这篇文章给大家介绍shell 脚本中有哪些常用的内置变量,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。$FUNCNAME、$LINENO、$PWDFUNCNAME和LINENO 变量经常用于脚本的调试FUNCNAME ...
    99+
    2023-06-15
  • Shell脚本中常用的内置变量有哪些
    这篇文章主要讲解了“Shell脚本中常用的内置变量有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell脚本中常用的内置变量有哪些”吧!在 Bash 解释器中,内置了许多变量,这些变...
    99+
    2023-06-15
  • shell 脚本中常用的内置变量(Bash 内置变量)
    $FUNCNAME、$LINENO、$PWD FUNCNAME和LINENO 变量经常用于脚本的调试 FUNCNAME 表示当前函数的名字,作用范围仅限函数中使用,在函数外无值 LINENO 表示当前所在脚本中变量出现在...
    99+
    2022-06-04
    shell内置变量 shell Bash 内置变量
  • 常用的shell脚本有哪些
    这篇文章主要讲解了“常用的shell脚本有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常用的shell脚本有哪些”吧!1.模拟linnux登录shell代码如下:#/bin/bashe...
    99+
    2023-06-09
  • 常用的shell变量有哪些
    小编给大家分享一下常用的shell变量有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一些常用的shell变量$# 传递到脚本的参数个数$* 以一个单字符串显...
    99+
    2023-06-27
  • 用内置变量调试shell脚本的方法
    一般的shell脚本的调试基本都是echo 来处理遇到比较大的脚本的时候,就比较麻烦了,出了问题,还不是很好定位哪行代码出问题了。其实shell内置的一些变量可以很好的解决这个问题: $LINENO $F...
    99+
    2022-06-04
    变量 脚本 方法
  • 怎么用内置变量调试shell脚本
    本篇内容主要讲解“怎么用内置变量调试shell脚本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用内置变量调试shell脚本”吧!一般的shell脚本的调试基本都是echo 来处理遇到比较大...
    99+
    2023-06-09
  • 有哪些常用的shell脚本命令
    有哪些常用的shell脚本命令?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。shell脚本基本命令:1、echo 命令1 基本使用Shell 的 echo 指令...
    99+
    2023-06-14
  • linux中面试常用Shell脚本有哪些
    小编给大家分享一下linux中面试常用Shell脚本有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!注意事项1)开头加解释器:#!/bin/bash2)语法缩进,使用四个空格;多加注释说明。3)命名建议规则:变量名大写...
    99+
    2023-06-16
  • 有哪些有用的Shell脚本
    这篇文章主要讲解了“有哪些有用的Shell脚本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些有用的Shell脚本”吧!【例子:001】判断输入为数字,字符或其他代码如下:#!/bin/...
    99+
    2023-06-09
  • 有哪些好用的Shell脚本常用命令
    这篇文章主要讲解了“有哪些好用的Shell脚本常用命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些好用的Shell脚本常用命令”吧!列出所有目录使用量,并按大小排序。代码如下:ls|...
    99+
    2023-06-09
  • 处理Shell脚本中带有空格的变量(bash脚本)
    本篇主要介绍bash脚本中对于含空格文件处理方式。 在批量处理音频文件时候使用下面的脚本发现含有空格的文件名并不能被处理; #$1: 遍历的文件夹 rootDir=$1 cd $rootDir allAudioFil...
    99+
    2022-06-04
    shell 空格变量 bash脚本变量
  • MYSQL中实用shell脚本有哪些
    小编给大家分享一下MYSQL中实用shell脚本有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • 常见的Shell脚本面试题有哪些
    这篇文章主要介绍常见的Shell脚本面试题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Shell脚本是什么、它是必需的吗答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使...
    99+
    2023-06-04
  • VBS中常用脚本有哪些
    这篇文章主要讲解了“VBS中常用脚本有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VBS中常用脚本有哪些”吧!将域用户或租添加到本地组 Set objGroup =...
    99+
    2023-06-08
  • 常用的Sheel脚本有哪些
    这篇文章给大家分享的是有关常用的Sheel脚本有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、list_sys_status.sh显示系统使用的以下信息:主机名、IP地址、子网掩码、网关、DNS服务器IP...
    99+
    2023-06-27
  • shell脚本中常见的一些特殊符号和作用有哪些
    这篇文章主要讲解了“shell脚本中常见的一些特殊符号和作用有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“shell脚本中常见的一些特殊符号和作用有哪些”吧!1、{} 大括号:用法一:...
    99+
    2023-06-09
  • 常用的Oracle 11g内存视图脚本有哪些
    今天就跟大家聊聊有关常用的Oracle 11g内存视图脚本有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。今天主要分享几个关于Oracle数据库...
    99+
    2024-04-02
  • VBS常用脚本有哪些
    本篇内容介绍了“VBS常用脚本有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!将 域用户或租添加到本地组 Set objGro...
    99+
    2023-06-08
  • 如何理解Shell脚本中的位置变量参数
    这篇文章主要介绍“如何理解Shell脚本中的位置变量参数”,在日常操作中,相信很多人在如何理解Shell脚本中的位置变量参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Shell脚本中的位置变量参数...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作