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. 在平衡树的海洋中畅游(三)——Splay

    Preface 由于我怕学习了Splay之后不直接写blog第二天就忘了,所以强行加了一波优先级. 论谁是天下最秀平衡树,我Splay第一个不服.维护平衡只靠旋转. 一言不合转死你 由于平衡树我也介绍 ...

  2. Java Web应用开发中的一些概念

    最近在学习Java Web,发现Java Web的概念很多,而且各个概念之间的关系也挺复杂,本篇博客把这些关系总结于此,主要参考的博客附在文章末尾. 概念 服务器 服务器,硬件角度上说就是一台高性能的 ...

  3. TRIO-basic指令--FLEXLINK

    Type: Axis Command Syntax: FLEXLINK(base_dist, excite_dist, link_dist, base_in, base_out, excite_acc ...

  4. [T-ARA][ORGR]

    歌词来源:http://music.163.com/#/song?id=29343993 作曲 : 4번타자/에스킴 [作曲 : 4p/beon-Ta-c/ja-/e-seu-Kim] 作词 : 4번 ...

  5. webpack笔记

    打包 img src src 必须以 点(.) 开始,才能被打包. 如: ./img/logo.png ../img/logo.png 使用 process a.js window.Base_Url ...

  6. Gerrit上分支操作记录(创建分支、删除分支)

    Git分支对于一个项目的代码管理而言,是十分重要的!许多久用git的朋友可能已经掌握的很牢固了,但对于一些初涉git的童鞋来说,可能还不是很熟悉.在此,我将自己的一些操作经历做一梳理,希望能帮助到有用 ...

  7. 读《移山之道-VSTS软件开发指南》

    首先,我选择<移山之道>有几个原因.第一,书的名字给我一种新鲜感,而不是像另外两本书那么平常:第二,作者邹欣是老师推荐的,看一看他的书或许能让我发现老师对他推崇备至的原因,而实际上,读完这 ...

  8. Linux学习期中总结

    一.<Linux内核分析>总结 (一)计算机是如何工作的 1.存储程序计算机工作模型 2. X86CPU的寄存器:通用寄存器.段寄存器.标志寄存器等. 3.计算机的汇编指令 (1)movl ...

  9. 同步手绘板——PC端实现画板

    同步显示上设想通过bitmap传值再在web端显示,查阅资料发现有点难以实现,所以在web也生成一个画板,实现与android端类似功能,由android传递路径集合到web端显示.

  10. PAT 1013 数素数

    https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112 令P~i~表示第i个素数.现任给两个正整数M ...