bash变量
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变量的更多相关文章
- Shell基础-Bash变量-用户自定义变量
变量设置规则: 变量名称可以由字母.下划线和数字组成,但是不能由数字开头. 在Bash中变量的默认类型是字符串类型,若需要进行数值运算,则需指定变量类型为数值型.变量用等号链接,且两边不能有空格.若需 ...
- 转 玩转Bash变量
PS : 注意本文讨论的是Bash,而不一定是/bin/sh所链接的那个shell.这里出现的所有代码片段,默认在顶上都添加了#!/bin/bash. 一门自带混淆的语言 while (( $# )) ...
- Shell学习之Bash变量详解(二)
Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...
- linux bash变量作用域
linux bash变量作用域 一,思考一个问题,当在shell里执行某个程序时,shell是怎么找到这个程序的? shell会去$PATH环境变量定义的目录里去找这个命令.环境变量里一般包括/usr ...
- linux学习18 shell脚本基础-bash变量和逻辑运行
一.回顾 1.用户管理,权限管理,install,mktemp 2.用户管理: 3.权限管理: mode,ownership mode: user group other r w x 4.命令:ins ...
- 二:shell之bash变量
1.变量的分类: 用户自定义变量: 变量自定义 默认存储是字符串环境变量: 这种变量中主要保存的是和系统操作环境相关的数据.变量可以自定义,但是对系统生效的环境变量名和变 ...
- Linux学习笔记(16)shell基础之Bash变量
1. 用户自定义变量 (1)变量设置规则 ① 变量名称可由字母.数字和下划线组成,但不能以数字开头: ② 变量的默认类型为字符串类型,如果要对数值运算,则必须指定变量类型为数值型: ③ 变量用等号连接 ...
- Bash:-变量替换后利用大括号获取数字存在的间隔
比如脚本输入位置变量:1_5 输出效果为: 1 2 3 4 5 脚本代码如下: #!/bin/bash i=1_5 for j in $(eval echo {${i/_/\..}});do echo ...
- linux笔记:shell基础-bash变量
shell变量设置规则: 变量的分类: 环境变量的设置: 系统常见环境变量: 位置参数变量(用来接收脚本的参数): 预定义变量: 接收键盘输入(将键盘输入的值赋值给变量名): 用declare声明变量 ...
- bash变量操作
1.条件变量替换: Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换 条件放在{}中. (1) ${value:-word} 当变量未定义或者值为空时,返回值为word ...
随机推荐
- 关于自定义的 XIB cell上的 button如何在控制器里实现点击方法
直接调用cell.button addTarget 的方法点击事件是失效的 这时需要你在xib中设置button的tag值 然后在返回cell的时候添加点击事件 UIButton *button = ...
- [个人翻译]Redis 集群教程(下)
[个人翻译]Redis 集群教程(上) [个人翻译]Redis 集群教程(中) 官方原文地址:https://redis.io/topics/cluster-tutorial 水平有限,如果您在阅读过 ...
- Ionic 2 中创建一个照片倾斜浏览组件
内容简介 今天介绍一个新的UI元素,就是当我们改变设备的方向时,我们可以看到照片的不同部分,有一种身临其境的感觉,类似于360全景视图在移动设备上的应用. 倾斜照片浏览 Ionic 2 实例开发 新增 ...
- 如何通过注解Bean类来封装SQL插入语句
整体思路是酱紫的: 给bean上注解说明该bean对应着数据库中哪张表,给每个bean的属性都注解说明各自对应着这张表的哪个字段. 通过类反射获取表名,通过逐个反射每个属性的getter方法,获取注解 ...
- BZOJ 4085:[Sdoi2015]quality(round 2 音质检测)(数据结构)
居然在考场上把这道题打出来了觉得自己也是有点吊啊(虽然后面就没时间做其他题了囧而且还被卡常数了...) 题解自己写了一份TEX的就直接放上来吧.... 好啦,在谈点什么别的 什么?你在bz上TLE了? ...
- Unity 碰撞器和触发器的理解
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对 ...
- 最常用的UML工具介绍
最常用的UML工具介绍 1.Rational Rose.大名鼎鼎,史上最有名.最无可替代的UML产品,以至于,大多数将之等同于UML工具,正如将可乐等同于可口可乐.需要指出的是,自从 Rational ...
- 玩转 iOS 10 推送 —— UserNotifications Framework(合集)
iOS 10 came 在今年 6月14号 苹果开发者大会 WWDC 2016 之后,笔者赶紧就去 apple 的开发者网站下载了最新的 Xcode 8 beta 和 iOS 10 beta,然后在自 ...
- 【经验】JavaScript
1.function closeWin(){ window.open('','_self'); window.opener=null; // window. ...
- HTML 5入门知识——Drag
HTML 5拖放 拖放的步骤: 1.对象元素的draggable属性设置为true,还需要注意的是a元素和img元素必须指定href. 2.编写与拖放有关的事件处理代码: DataTransfer对象 ...