- 在当前Shell会话中使用,全局变量。
- 在函数内部使用,局部变量。
- 可以在其他Shell会话中使用,环境变量。
func
echo $a 输出 >> 99 为了让全局变量变成局部变量 #!/bin/bash function func() { local a=99 }
func
echo $a 输出为空,说明此时变量a是局部变量 环境变量: 在父Shell中定义的变量,在子Shell中可以调用。
Shell位置参数 1) 给脚本传递位置参数 在运行shell脚本的时候可以带入一些位置参数,在脚本中$n来接收参数的值。如下: #!/bin/bash echo "language: $1" echo "username: $2" 运行: >> bash filename.sh Chinese mocun 输出: >> language: Chinese >> username: mocun 2) 给函数传递位置参数 #!/bin/bash function func() { echo "language: $1" echo "username: $2" }
func c++ mocun 这时就不能在运行的时候通过命令传入了,直接在脚本中调用函数的同时给参数就行。 输出: >> language: c++ >> username: mocun 如果参数过多,超过10个了,那么就需要用${n}来接收,帮助解释器明确参数的边界,如:${11}
特殊变量
变量 | 含义 |
$0 | 当前脚本的文件名 |
$# | 传递给脚本或者函数的参数个数 |
$* | 传递给脚本或者函数的所有参数 |
$@ | 传递给脚本或者函数的所有参数。当被双引号包含时,与上述$*有所不同。 |
$? | 上个命令的退出状态 |
$$ | 当前Shell的进程ID。对于Shell脚本,就是这些脚本所在的进程ID。 |
Process ID: 39817
File Name: seventh.sh
First Parameter: yinzm
Second Parameter: mocun
All Parameters 1: yinzm mocun
All Parameters 2: yinzm mocun
Total: 2
$*与$@的区别 简单说,当两个参数没有被双引号包含时是一模一样的效果,都是接收若干个独立的参数。但是当被双引号包含时,$*会将得到的所有参数拼在一起,但是$@仍然是若干个独立的参数。 示例,文件名filename.sh: #!/bin/bash echo "print each param from \"\$*\"" for var in "$*" do echo "$var" doneecho "print each param from \"\$@\"" for var in "$@" do echo "$var" done 运行: >> bash filename.sh a b c 输出:
print each param from "$*"
a b c
print each param from "$@"
a
b
c
$?的作用 1.获取上一个命令的退出状态 2.获取函数的返回值
原文地址:https://www.cnblogs.com/yinzm/p/10325056.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。