标签:class 接收参数 fun $* name top height 退出 函数
Shell中变量的作用域:
-
在当前Shell会话中使用,全局变量。
-
在函数内部使用,局部变量。
-
可以在其他Shell会话中使用,环境变量。
局部变量:
默认情况下函数内的变量也是全局变量
#!/bin/bash
function func() {
a=99
}
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。
|
示例,文件名为test.sh:
#!/bin/bash
echo "Process ID: $$"
echo "File Name: $0"
echo "First Parameter: $1"
echo "Second Parameter: $2"
echo "All Parameters 1: $@"
echo "All Parameters 2: $*"
echo "Total: $#"
运行命令:
>> bash test.sh yinzm mocun
输出
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"
done
echo "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.获取函数的返回值
Shell基础知识(三)
标签:class 接收参数 fun $* name top height 退出 函数
原文地址:https://www.cnblogs.com/yinzm/p/10325056.html