bash中的变量的种类

根据变量的生效范围等标准

  • 本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效;
  • 环境变量:生效范围为当前shell进程及其子进程;
  • 局部变量:生效范围为当前shell进程中某代码片断(通常指函数);
  • 位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数;
  • 特殊变量:$?, $0, $*, $@, $#,$n,$$

一、本地变量

1.变量赋值:name='value'

value可以使用引用:

(1) 可以是直接字串; name="username"
(2) 变量引用:name="$username"
(3) 命令引用:name=`COMMAND`, name=$(COMMAND)

2.变量引用:${name}, $name

"":弱引用,其中的变量引用会被替换为变量值;
'':强引用,其中的变量引用不会被替换为变量值,而保持原字符串;

3.显示变量:

set

4.销毁变量:

unset name

 [root@cl ~]# myUrl="https://i.cnblogs.com/EditPosts.aspx?opt=1"
[root@cl ~]# echo ${myUrl}
https://i.cnblogs.com/EditPosts.aspx?opt=1
[root@cl ~]# echo $myUrl
https://i.cnblogs.com/EditPosts.aspx?opt=1
[root@cl ~]# set | grep myUrl
myUrl='https://i.cnblogs.com/EditPosts.aspx?opt=1'
[root@cl ~]# unset myUrl
[root@cl ~]# set | grep myUrl
_=myUrl

二、环境变量

1.变量赋值:

export name=VALUE
declare -x name=VALUE

$name, ${name}

3.显示所有环境变量:

export
env
printenv

4.销毁:

unset name

note:bash有许多内建的环境变量:PATH, SHELL, UID, HISTSIZE, HOME, PWD, OLD, HISTFILE, PS1 (不能用这些变量名)

note:推荐给所有变量加上花括号${name}

三、变量命名法则:

1、不能使程序中的保留字:例如if, for;
2、只能使用数字、字母及下划线,且不能以数字开头;
3、变量和=之间不能有空格;
4、见名知义。

只读变量
readonly name
declare -r name

note:变量被删除后不能再次使用;unset 命令不能删除只读变量。

四、特殊变量

参数 说明
 $0 当前脚本的文件名。
 $* 以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
 $# 传递给脚本或函数的参数个数。
 $$ 脚本运行的当前进程ID号 。
 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
 $? 上个命令的退出状态,或函数的返回值。
 $! 后台运行的最后一个进程的ID号

位置变量:
在脚本代码中调用通过命令行传递给脚本的参数;
$1, $2, ...:对应调用第1、第2等参数;
示例:

创建脚本:

 [root@cl bin]# vim test.sh
#!/bin/bash
#author:Fox_Chen echo "File Name: $0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo "第三个参数为:$3"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

授权及检查:

 [root@cl bin]# chmod +x test.sh
[root@cl bin]# bash -n test.sh

执行脚本:

 [root@cl bin]# ./test.sh {a..d}
File Name: ./test.sh
第一个参数为:a
第二个参数为:b
第三个参数为:c
Quoted Values: a b c d
Quoted Values: a b c d
Total Number of Parameters :

note:$*和$@

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
示例:判断给出的文件的行数

 #!/bin/bash
linecount="$(wc -l $1| cut -d' ' -f1)"
echo "$1 has $linecount lines."

bash变量的更多相关文章

  1. Shell基础-Bash变量-用户自定义变量

    变量设置规则: 变量名称可以由字母.下划线和数字组成,但是不能由数字开头. 在Bash中变量的默认类型是字符串类型,若需要进行数值运算,则需指定变量类型为数值型.变量用等号链接,且两边不能有空格.若需 ...

  2. 转 玩转Bash变量

    PS : 注意本文讨论的是Bash,而不一定是/bin/sh所链接的那个shell.这里出现的所有代码片段,默认在顶上都添加了#!/bin/bash. 一门自带混淆的语言 while (( $# )) ...

  3. Shell学习之Bash变量详解(二)

    Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...

  4. linux bash变量作用域

    linux bash变量作用域 一,思考一个问题,当在shell里执行某个程序时,shell是怎么找到这个程序的? shell会去$PATH环境变量定义的目录里去找这个命令.环境变量里一般包括/usr ...

  5. linux学习18 shell脚本基础-bash变量和逻辑运行

    一.回顾 1.用户管理,权限管理,install,mktemp 2.用户管理: 3.权限管理: mode,ownership mode: user group other r w x 4.命令:ins ...

  6. 二:shell之bash变量

    1.变量的分类: 用户自定义变量:   变量自定义 默认存储是字符串环境变量:              这种变量中主要保存的是和系统操作环境相关的数据.变量可以自定义,但是对系统生效的环境变量名和变 ...

  7. Linux学习笔记(16)shell基础之Bash变量

    1. 用户自定义变量 (1)变量设置规则 ① 变量名称可由字母.数字和下划线组成,但不能以数字开头: ② 变量的默认类型为字符串类型,如果要对数值运算,则必须指定变量类型为数值型: ③ 变量用等号连接 ...

  8. Bash:-变量替换后利用大括号获取数字存在的间隔

    比如脚本输入位置变量:1_5 输出效果为: 1 2 3 4 5 脚本代码如下: #!/bin/bash i=1_5 for j in $(eval echo {${i/_/\..}});do echo ...

  9. linux笔记:shell基础-bash变量

    shell变量设置规则: 变量的分类: 环境变量的设置: 系统常见环境变量: 位置参数变量(用来接收脚本的参数): 预定义变量: 接收键盘输入(将键盘输入的值赋值给变量名): 用declare声明变量 ...

  10. bash变量操作

    1.条件变量替换: Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换 条件放在{}中. (1) ${value:-word} 当变量未定义或者值为空时,返回值为word ...

随机推荐

  1. (原)SQL Server 系统提供功能的三个疑惑

    本文目录列表: 1.SQL Server系统提供的部分疑惑概述2.系统函数调用时DEFAULT代替可选参数使用不统一3.队列字段列message_enqueue_time记录的是UTC日期时间 4.@ ...

  2. vs2010入门程序和出错问题解决方案

    本篇文章分两个部分: 第一,如何建立一个Helloword工程 1.打开Vs2010新建项目 2.选择Visual C++>>Win32>>Win32控制台应用程序,输入项目名 ...

  3. MongoDB学习总结(五) —— 安全认证

    作为数据库软件,我们要确保数据的安全,不是谁都可以访问的,所以mongodb也像其他的数据库软件一样可以采用用户验证的方法, mongodb 3.0之前的版本提供了addUser方法向不同的数据库添加 ...

  4. SpringMVC简版教程、部分功能

    注:本文只用注解来实现 前言 SpringMVC各种流程图流程图(其他的各种流程图) jsp.xml.action彼此之间的关系,都如何使用 spring-mvc.xml如何配置,放在哪里? acti ...

  5. Cassandra 学习笔记 - 1 - 关于Cassandra

    摘要 - Cassandra 的历史 Cassandra能做什么 Apache Cassandra最早是Facebook为了改进他们的Inbox搜索功能,由Avanash Lakshman和Prash ...

  6. C++程序员的阅读清单

    link:http://www.who1753.com/must-read-c-book-list/ 多读一些优秀的书籍,对于开发者稳固编程基础.提高编程技能有很大帮助.但是,大多时候,初学者不知道应 ...

  7. 2732: [HNOI2012]射箭( 半平面交 )

    很久没写题解了= =,来水一发吧= = 首先这道题很明显就是求y=ax^2+bx的是否有值取,每一个式子都代表着两个半平面,然后直接半平面交就行了 借鉴了hzwer的代码,还是特别简洁的说 CODE: ...

  8. C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...

  9. Ceph部署(二)RGW搭建

    背景 Ceph RGW简介 Ceph RGW基于librados,是为应用提供RESTful类型的对象存储接口.RGW提供两种类型的接口: 1) S3:兼容Amazon S3RESTful API: ...

  10. java Log日志规范

    Overview 一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神.程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的.本文想讨论的是 ...