Shell脚本,环境变量,位置变量,预定义变量,自定义变量,单引号双引号反引号用法,一般变量和交互式变量read定义,密文输入变量信息
Shell脚本,变量,系统预设的环境变量,位置变量,预定义变量,用户的自定义变量
一、定义变量
1、以固定的名称存放可以变化的值
2、格式为
变量名=变量值
3、取消变量的格式
unset 变量名
4、注意事项
=两边不可以有空格
不可以使用关键字作为变量名,如ls,cd
使用已经存在的变量名会覆盖原有的值
变量名称不可以使用数字开头
变量名称可以包括下划线_,参考编程语言中变量的定义时变量名的命名方法。
二、访问变量
1、$变量名 //访问变量
例如:echo $MyName
2、${变量名} //访问变量且需要接其他数据
例如:echo ${MyAge}12345
3、尝试访问未定义的变量会返回空值。
4、脚本中的变量名在脚本运行完以后被自动释放,一般不需要使用unset手动释放,一个脚本类似于编程语言中一段被{}括起来的代码段,管理变量生命周期时拥有类似“栈”的作用。
三、系统预设变量
1、环境变量
变量名通常大写,由操作系统维护
存储在/etc/profile或者~/.bash_profile
命令env可以列出所有环境变量
常见的环境变量有:PATH,PWD,USER,UID,HOME,SHELL
可以使用echo $PATH查看值
PATH用来搜索命令的路径,如果PATH的值设置为空,类似ls这样的常用命令就无法使用了。
如果在一个创建的会话中不小心修改了环境变量的值并且不知道怎么改回来,可以通过重新创建一个新会话的方法,将之前的会话中临时修改的变量恢复回来。
2、位置变量
bash内置变量,存储脚本执行时的参数
使用$n表示,n为数字序列号
例如:$1,$2,$3,$4,$5, 6 , 6, 6,{10},${12}两位数以上需要用{}括起来
作用:
$num会自动对应到命令后面接的参数,例如自己创建的文本test中内容为
echo $1
echo $2
echo $3
这里的$1会自动对应到执行test命令是后面接的第一个参数,同理,$2和$3会分别对应第二个和第三个参数。
bash test aa bb cc
执行时会打印出
aa
bb
cc
三个参数内容,如果不输入aabbcc,就会打印三行空内容。
如果参数不够,多的参数会默认为空,
如果参数多了,只会访问指定的参数
例子:通过位置变量写一个创建用户和密码的脚本
脚本名为useradd_group,这个脚本命令传入一个参数作为创建用户的用户名,并将该用户的属组设置为用户名+group,然后使用id显示这个用户的信息。
内容为:
useradd “$1”
groupadd ${1}group
usermod $1 -G ${1}group
id $1
3、预定义变量
bash内置变量,可以调用但是不能赋值或者修改
$0:当前所在进程或脚本名,一般是命令名或或者脚本名
$$:当前运行进程的pid
$?:命令执行后的返回状态,0位正常,1或其他值表示异常
$#:已加载的位置变量的个数,就是命令的参数的个数
$*:所有位置变量的值,就是命令的参数的值
想要查看与自变量的内容,使用echo就可以
4、自定义变量
用户自主设置的变量
引号用法:
双引号""允许扩展,以 引 用 其 他 变 量 单 引 号 ′ ′ 禁 用 扩 展 , 即 便 引用其他变量 单引号''禁用扩展,即便 引用其他变量单引号′′禁用扩展,即便也视为普通字符
反引号 将命令的执行输出作为变量值,$()与反引号等效
二、引号的作用:
1、将一对零散的字符整合成一个字符串,例如:
touch a b c 计算机会创建三个文件,分别名为a,b,c
touch “a b c” 计算机会创建一个名为"a b c"
对删除等命令,双引号作用等价
单双引号的区别
1、赋值时将值进行扩展,如果双引号中有 , 则 会 读 取 ,则会读取 ,则会读取对应的变量值
hi=“world”
hia=“hello h i " e c h o " hi" echo " hi"echo"hia” 命令可以显示helloworld
echo ' h i a ′ 命 令 可 以 显 示 hia' 命令可以显示 hia′命令可以显示hia,因为单引号屏蔽特殊符号,不允许扩展,并将特殊字符视为普通字符
反引号的特性:
将命令的执行输出作为变量值,等价于 ( 命 令 ) 作 用 : 将 命 令 执 行 之 后 的 输 出 结 果 。 键 盘 上 横 排 数 字 键 1 的 左 边 就 是 反 引 号 键 。 注 意 : 反 引 号 存 放 的 命 令 属 于 是 常 亮 , 例 如 设 置 一 个 变 量 t e s t = (命令) 作用:将命令执行之后的输出结果。 键盘上横排数字键1的左边就是反引号键。 注意:反引号存放的命令属于是常亮,例如设置一个变量test= (命令)作用:将命令执行之后的输出结果。键盘上横排数字键1的左边就是反引号键。注意:反引号存放的命令属于是常亮,例如设置一个变量test=(ll),不管在任何目录下输出这个变量的值,输出的都是定义这个变量时的命令的执行结果。
三、交互式变量定义赋值:
使用read定义变量,定义但不赋值
read name
紧接着输入值,但一般需要加上 -p “提示信息”
read -p “输入名称:” iname
将read命令放在脚本中,可以与用户进行交互
read -p “INPUTNAME:” name
read -p “INPUTGROUP:” group
useradd $name -G $group
id $name
如果是输入密码之类的信息,可以在read后面加上-s参数,就是密文输入了,注意-s要紧跟着read命令。
如果是输入有时限,可以在read后面接-t secs来设置输入的时间
全局变量和局部变量:
局部变量:
新定义的变量默认只在当前shell环境中有效,无法在子shell环境(子进程)中使用
例如:
x=10
sh //进入sh,这个sh就是开启它的bash的子shell
echo $x //x没有值
全局变量在当前shell及子shell中均有效
定义全局变量的方法:
export x=10
这个x就会成为全局变量
Shell脚本,环境变量,位置变量,预定义变量,自定义变量,单引号双引号反引号用法,一般变量和交互式变量read定义,密文输入变量信息相关推荐
- shell脚本编译规范(编写第一个脚本,脚本变量的作用,类型 ,了解read命令,let命令,环境变量和预定义变量)
文章目录 shell脚本编译规范 shell脚本应用场景 shell编程规范 编写第一个脚本 执行脚本文件四种方法 echo输出友好提示信息 管道与重定向 管道操作符号"|" sh ...
- 09.PATH变量、PS1变量、LANG语系变量、位置参数变量、预定义变量详解
目录 1.PATH变量 2.PS1变量 3.LANG语系变量 4.位置参数变量 5.预定义变量 1.PATH变量 [root@localhost lib]# echo $PATH /usr/lib64 ...
- centos shell基础 alias 变量单引号 双引号 history 错误重定向 21 jobs 环境变量 .bash_history source配置文件 nohup ...
centos shell基础知识 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 ...
- shell中单引号双引号反引号的区别
本文首发于 http://blog.csdn.net/lineuman 1.shell中单引号,双引号,反引号的区别? 2.shell IFS解惑? 2017.4.19答 在shell中这几个引号的区 ...
- 【Shell秒懂系列】引用及转义(单引号/双引号/反斜杠/反引号)
Shell编程中主要以字符串实现数据传递,因此也赋予引号更多含义.为避免一些不必要的麻烦,你应当首先考虑使用双引号引用参数变量; 引号和转义是Shell中对字符串进行解析.扩展的主要手段. 引号释义 ...
- Shell中 单引号(‘‘) 双引号(““) 反引号(``) $() 的区别
字符串与引号 Shell 的模型就是标准的字符流过滤器模型,简单来说,就是一条命令把结果送到标准 输出,这个标准输出被连接到下一个命令的标准输入,由此来实现一系列命令之间的联动. 每一个命令的输出都是 ...
- make的自动变量和预定义变量
make的自动变量 $@ 规则目标的文件名.如果目标是档案文件的一个成员,"$@"就是档案文件的名称 $% 当目标是档案文件的一个成员时,"$%"是该成员的名称 ...
- java 中的 sql 单引号双引号拼接变量
String sqlString="select * from tb_wf_main where trim(WF_NAME) = ' " + wfName.trim() + & ...
- Linux Shell 单引号 双引号 使用区别
From:https://blog.csdn.net/lifu119/article/details/7868231 在bash脚本中,有三种引号 1. 单引号 ' 2. 双引号 " 3. ...
最新文章
- 启动hadoop的节点
- java如何访问局域网共享文件
- 转向AIOps之前,你应该做好哪些准备?
- java work stealing_Java线程池之WorkStealingPool,任务窃取算法
- Qt下继承于QObject创建的线程
- /usr/include/features.h:356:25: 致命错误: sys/cdefs.h:没有那个文件或目录
- 使用Jackson忽略JSON对象上的新字段[复制]
- 鸿蒙系统翻车了,鸿蒙“翻车”? 网友发现鸿蒙系统居然是安卓9.0
- Onvif协议学习:8、设备校时
- 技嘉主板bios怎么进入,如何进入技嘉主板的bios
- 树莓派4B(bullseye),傻瓜式配置镜像源和QT,cmake等环境
- 前端CSS学习(第3、4天)
- 艳照门事件发酵 谷歌称已删除数万张照片
- gitlab 版本升级
- 第8章 面向对象编程(中级部分)
- 精通CSS.DIV网页样式与布局(二)—— 段落
- 深入学习Hive应用场景及架构原理
- 分析网络钓鱼的原理及防御措施
- 解决android studio编译的速度慢,安装apk过慢的问题
- 计算机在会计专业的作用论文开题报告,会计电算化对传统会计的影响开题报告.docx...