Shell基础知识三

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.获取函数的返回值

 

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...