GVKun编程网logo

linux shell 脚本 获取当前函数名(shell获取当前脚本名称)

3

本文将为您提供关于linuxshell脚本获取当前函数名的详细介绍,我们还将为您解释shell获取当前脚本名称的相关知识,同时,我们还将为您提供关于Linux-常用shell简介及shell基本操作、

本文将为您提供关于linux shell 脚本 获取当前函数名的详细介绍,我们还将为您解释shell获取当前脚本名称的相关知识,同时,我们还将为您提供关于Linux - 常用 shell 简介及 shell 基本操作、Linux =有没有类似“Java Shell”而不是其他Linux shell?、Linux PHP53升级PHP5533 linux php升级5.5 php5.2 for linux linux libphp5.s、linux Shell 命令行-03-array Shell 数组的实用信息。

本文目录一览:

linux shell 脚本 获取当前函数名(shell获取当前脚本名称)

linux shell 脚本 获取当前函数名(shell获取当前脚本名称)

linux bash shell 中

$FUNCNAME 得到当前函数名

${FUNCNAME[1]} 得到上一层函数名 如果上层没有函数调用 则为空

在C/C++中,__FUNCTION__常量记录当前函数的名称。有时候,在日志输出的时候包含这些信息是非常有用的。而在Bash中,同样有这样一个常量FUNCNAME,但是有一点区别是,它是一个数组而非字符串,其中数组的第一个元素为当前函数的名称。

可能初看有点难以理解,为什么FUNCNAME要是一个数组呢?看看下面的例子,你就明白了。

#!/bin/bash

function test_func()
{
    echo "Current $FUNCNAME,\$FUNCNAME => (${FUNCNAME[@]})"
    another_func
    echo "Current $FUNCNAME,\$FUNCNAME => (${FUNCNAME[@]})"
}

function another_func()
{
    echo "Current $FUNCNAME,\$FUNCNAME => (${FUNCNAME[@]})"
}

echo "Out of function,\$FUNCNAME => (${FUNCNAME[@]})"
test_func
echo "Out of function,\$FUNCNAME => (${FUNCNAME[@]})"

执行后的结果为:

Out of function,$FUNCNAME => ()
Current test_func,$FUNCNAME => (test_func main)
Current another_func,$FUNCNAME => (another_func test_func main)
Current test_func,$FUNCNAME => (test_func main)
Out of function,$FUNCNAME => ()

所以,更加准确地说,FUNCNAME是一个数组,但是bash中会将它维护成类似一个堆栈的形式。

与FUNCNAME相似的另外一个比较有用的常量是BASH_SOURCE,同样是一个数组,不过它的第一个元素是当前脚本的名称。
这在source的时候非常有用,因为在被source的脚本中,$0是父脚本的名称,而不是被source的脚本名称。而BASH_SOURCE
就可以派上用场了。

# If the script is sourced by another script
if [ -n "$BASH_SOURCE" -a "$BASH_SOURCE" != "$0" ]
then
    do_something
else # Otherwise,run directly in the shell
    do_other
fi

唯一遗憾的是,这种做法会让脚本失去一些可移植性,因为不是所有的shell都支持这些常量。

 

 

Linux - 常用 shell 简介及 shell 基本操作

Linux - 常用 shell 简介及 shell 基本操作

1. 查询 shell 环境变量,切换 shell 种类

​​

表明目前使用的 shell 种类是 bash。

要想改变 shell 种类,在终端输入想要运行的 shell 名称即可。在切换 shell 种类的过程中,可能会操作失败,这是因为 ubuntu 没有自带安装想要切换的 shell 种类。

​​

2.shell 命令的基本格式

shell 的命令格式如下:

command -options [argument]

command:shell 命令的名称。

-options: 选项,同一个命令可能有很多不同的选项,用来完成不同的具体功能。

[argument]: 参数,作为 shell 命令的输入,有的 shell 命令可以没有参数,或者不带参数运行。

例如:

​​

ls  //查看当前目录下的文件及文件夹
ls -l  //查看当前目录下的文件及文件夹的详细信息
ls -l /home  //查看/home目录下的文件及文件夹的详细信息

 

3.shell 的常用特殊符号

(1)“*”

    是一个通用符号,可以表示任意一个字符(包括空字符)或多个字符组成的字符串。例如

ls -l /bin/e*  //查看/bin/目录下的所有以e开头的文件及文件夹的详细信息

 

​​

(2)“?”

    功能类似于 “*” 符号,但是只能表示单个字符,不能表示由多个字符组成的字符串。例如

ls -l /bin/e?  //查看/bin/目录下的所有以e开头的长度为2的文件及文件夹的详细信息

 

​​

(3)“[ ]”

指定范围,用来指定被显示的内容的范围。例如,在 /home/leon 目录下新建一个文件夹,名为 test, 在 test 文件夹下新建 5 个文件夹,名为 a、b、c、d、e。

cd /home/leon/test  //进入到该目录下cd /home/leon/test 
ls [a-c]  //仅查看名为a~c的文件及文件夹

 

​​​​

(4)“!”

      排除符号,用来指定被屏蔽显示内容的部分。需要与 “[]” 符号联合使用。例如

ls [a-c]  //仅查看名为a~c的文件及文件夹

 

​​

(5)“;”

分割符号,用于在一行输入多个命令时,分隔各个命令。例如

ls;ls -l  //查看当前目录下的文件及文件夹,然后查看他们的详细信息

(6)“`”

命令替代符,这个符号总是成对出现,他们包含的内容在 shell 中表示一条命令,并且会被执行。例如

echo `ls -l`  //将命令“ls -l”的结果显示出来
echo ''ls -l''  //这里是单引号,表示显示“ls-l”这个字符串

(7)“#”

注释符号,以 “#” 开头的一行被当作是注释处理,不会被执行。

ls -l  //查看当前目录下的文件和文件夹的详细信息
# ls -l  //添加上“#”号,该命令被当作注释,不会被执行

4. 自动补全功能

输入 “who”, 然后按住 TAB 键,系统将发出警报声,此时可以继续输入,也可以在此按下 TAB 键,系统将列出说有 who 开头的命令。


5. 按方向键上和下可以选择曾经输入过的历史命令。

6.shell 别名机制

需要用到 “alias” 命令

mynet  //输入mynet,Linux中并无此命令
ifconfig  //ifconfig命令可以查看网络情况
alias mynet=ifconfig  //给ifconfig起个别名mynet
mynet  //mynet就可以生效了

Linux =有没有类似“Java Shell”而不是其他Linux shell?

Linux =有没有类似“Java Shell”而不是其他Linux shell?

我最了解的编程语言是 Java.目前,我必须编写相当多的“shell脚本”来自动化我的服务器.有没有像“Java Shell”这样的东西,所以我可以用Java编写shell脚本?

解决方法

你可以得到groovy并使用groovysh.我已经做了一些事情,但我发现perl或bash / sh对于管理脚本最有用.当您需要做的就是执行OS命令和搜索文本时,像Java这样的应用程序语言会增加很多开销.

Linux PHP53升级PHP5533 linux php升级5.5 php5.2 for linux linux libphp5.s

Linux PHP53升级PHP5533 linux php升级5.5 php5.2 for linux linux libphp5.s

linux Shell 命令行-03-array Shell 数组

linux Shell 命令行-03-array Shell 数组

拓展阅读

linux Shell 命令行-00-intro 入门介绍

linux Shell 命令行-02-var 变量

linux Shell 命令行-03-array 数组

linux Shell 命令行-04-operator 操作符

linux Shell 命令行-05-test 验证是否符合条件

linux Shell 命令行-06-flow control 流程控制

linux Shell 命令行-07-func 函数

linux Shell 命令行-08-file include 文件包含

linux Shell 命令行-09-redirect 重定向

定义

Shell 仅支持单维数组。

array=(值1 值2 ... 值n)
  • array.sh
#!/bin/sh

# 数组演示
array=(a b "c" d)

# 另一种定义数组的方式

array_two[0]=a
array_two[1]=b
array_two[2]="c"
array_two[3]=d

读取

您可以这样从数组中读取:

${array_name[index]}
  • read_array.sh
#!/bin/sh

# 从数组中读取

array=(a b c "d")
echo "第一个元素是 ${array[0]}"
echo "第二个元素是 ${array[1]}"
echo "第三个元素是 ${array[2]}"
echo "最后一个元素是 ${array[-1]}"
  • 运行
root@iZuf60ahcky4k4nfv470juZ:~/code/shell# chmod +x read_array.sh 
root@iZuf60ahcky4k4nfv470juZ:~/code/shell# ./read_array.sh 
第一个元素是 a
第二个元素是 b
第三个元素是 c
最后一个元素是 d

读取所有元素

我们可以使用 *@ 来获取数组中的所有元素。

  • read_all_array.sh
#!/bin/sh
# 读取数组中的所有元素

array=(a b c d)
echo "数组中的所有元素:${array[*]}"
echo "数组中的所有元素:${array[@]}"
  • 运行
root@iZuf60ahcky4k4nfv470juZ:~/code/shell# chmod +x read_all_array.sh 
root@iZuf60ahcky4k4nfv470juZ:~/code/shell# ./read_all_array.sh 
数组中的所有元素:a b c d
数组中的所有元素:a b c d

数组长度

我们可以使用 ${#array[*]}${#array[@]} 来获取数组的大小。

  • array_length.sh
!#/bin/sh
# 数组长度

array=(a b c d E)
echo "数组的大小为:${#array[*]}"
echo "数组的大小为:${#array[@]}"
  • 运行
root@iZuf60ahcky4k4nfv470juZ:~/code/shell# chmod +x array_length.sh 
root@iZuf60ahcky4k4nfv470juZ:~/code/shell# ./array_length.sh 
数组的大小为:5
数组的大小为:5

参考资料

https://www.runoob.com/linux/linux-shell.html

本文由博客一文多发平台 OpenWrite 发布!

关于linux shell 脚本 获取当前函数名shell获取当前脚本名称的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Linux - 常用 shell 简介及 shell 基本操作、Linux =有没有类似“Java Shell”而不是其他Linux shell?、Linux PHP53升级PHP5533 linux php升级5.5 php5.2 for linux linux libphp5.s、linux Shell 命令行-03-array Shell 数组等相关知识的信息别忘了在本站进行查找喔。

本文标签: