码迷,mamicode.com
首页 > 系统相关 > 详细

Shell基础知识(三)

时间:2019-01-26 22:42:07      阅读:197      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!