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基础知识(三)的更多相关文章

  1. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

  2. Linux Shell 基础知识(一)

    1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 ​ GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...

  3. java 基础知识三 java变量

    java  基础知识 三 变量 1.作用域 {} 包围起来的代码 称之为代码块,在块中声明的变量只能在块中使用 2.常量 就是固定不变的量,一旦被定义,它的值就不能再被改变. 3.变量 变量必须在程序 ...

  4. Python基础知识(三)

    Python基础知识(三) 一丶整型 #二进制转成十进制的方法 # 128 64 32 16 8 4 2 1 1 1 1 1 1 1 例如数字5 : 101 #十进制转成二进制的方法 递归除取余数,从 ...

  5. Shell 基础知识和总结

    调试脚本 检查脚本语法错误 bash -n /path/to/some_script 调试执行 bash -x /path/to/some_script shell里的变量 本地变量:只对当前shel ...

  6. C# 基础知识 (三).主子对话框数值传递

    在C# winform编程中,我们经常会遇到不同窗口间需要传递数值的问题.比如数据库的应用,主窗口填写内容num1,点击按钮,在弹出的子窗口显示对应num1值;或者在子窗口填写新注册用户名信息,在主窗 ...

  7. 快速掌握JavaScript面试基础知识(三)

    译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...

  8. shell基础知识总结

    1. shell 对于一台计算机而言,其硬件受系统内核的控制,使用者想要控制计算机,就必须有与系统内核进行通讯的手段.而shell就是使用者与计算机进行通讯的手段之一.从命名上看,shell其实是相对 ...

  9. shell基础知识---与监听服务器长连接端口状态

    从未写过脚本我的最近接了俩脚本的需求,就在这分享一下我的我学到基础知识主要就四部分内容 一.变量 变量的定义 string='字符串' string="字符串" num=808st ...

  10. shell基础知识讲解

    第1章 shell基础 1.1 什么叫做shell编程 shell编程也叫做bash高级编程语法 1.2 常见的shell命令解释器 bash            redhat和centos使用 d ...

随机推荐

  1. 使用Pandas_UDF快速改造Pandas代码

    1. Pandas_UDF介绍 PySpark和Pandas之间改进性能和互操作性的其核心思想是将Apache Arrow作为序列化格式,以减少PySpark和Pandas之间的开销. Pandas_ ...

  2. Reactjs-JQuery-Omi-Extjs-Angularjs对比

    写在前面 前端越来越混乱了,当然也可以美其名曰:繁荣. 当新启动一个前端项目,第一件事就是纠结:使用什么框架,重造什么轮子? 那么,希望看完此篇,能够给你一个清晰的认识,或者让你更加地纠结和无所适从 ...

  3. C语言基础复习:字符,字符数组,字符串,字符指针

    1. 概述2. 字符2.1 字符定义和大小2.2 字符的输入和输出2.3 字符的计算3. 字符数组3.1 字符数组的定义和大小3.2 字符数组的输入和输出3.3 字符数组的计算4. 字符串4.1 字符 ...

  4. Nagios监控系统部署(源码)

    1. 概述2. 部署Nagios2.1 创建Nagios用户组2.2 下载Nagios和Nagios-plugin源码2.3 编译安装3. 部署Nagios-plugin3.1 编译安装nagios- ...

  5. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--请求处理结果适配篇(7/8)

    文章目录 前情概要 前面一大坨一大坨的代码把route.controller.action.attribute都搞完事儿了,最后剩下一部分功能就是串起来的调用. 那接下就说个说第二个中间件,也是最后一 ...

  6. 网络流第一题!!!BZOJ1001

    歇逼了一晚上,懵懵懂懂的懂了Dinic算法 大概是一遍BFS+DFS,还不是很懂,明天继续看!!! #include<iostream> #include<stdio.h> # ...

  7. 2-Twenty First Scrum Meeting-20151221

    任务安排 成员 今日完成 明日任务 闫昊 请假(数据库)   唐彬 请假(数据库)   史烨轩  尝试使用downloadmanager对notification进行更新  尝试使用downloadm ...

  8. 删除运行时权限不足,cmd开启管理员

    管理员帐号活跃代码:net user administrator /active:yes 搜索cmd-右键以管理员身份运行 切换administrator帐号登录 操作后最后关闭这么高的权限,避免被非 ...

  9. numpy行转列

    >>> a = np.array([1, 2, 3]) >>> a = a.reshape(-1, 1) #-1表示任意行数,1表示1列 >>> ...

  10. WebLogic: 内存溢出

    每次部署完项目,重启Weblogic服务,总是遇到java.lang.OutOfMemoryError: PermGen space,其实物理内存也是够的,当时的解决方法就是多重启几次Weblogic ...