shell脚本1——变量 $、read、``
与Shell变量相关的几个命令:
变量只在当前Shell中生效.
source 这个命令让脚本影响他们父Shell的环境(. 可以代替source命令)
export 这个命令可以让脚本影响其子Shell的环境 ()
unset 从环境中删除变量
其他几个与变量有关的命令:
declare: 用于显示或设置变量
let: 用于求整数表达式的值
local: 用于创建不能传给子Shell的变量, 这个命令仅在过程内部有效
readonly: 用于显示或者设置只读变量
set: 用于设置或者重置各种Shell选项(不仅用于变量)
shift: 用于移动位置变量
typeset: 用于显示或者设置变量(同declare)
变量赋值
logfile="stdout.log" echo "$logfil"
1、变量赋值——没有类型,根据赋值的类型决定变量类型,可以多次随意赋值。赋值号两边不能有空格
1)显示定义:VAR=value
变量声明时使用的引号不会被保留,当变量值中有空格时必须使用引号
2)读取:read VAR
一次读入一行! 可以一次读入多个变量read。
read firstname lastname 输入:steve Parker Smith 以空格分,最后一个变量两个 输入:steve 给的少,后一个变量为空字符串,一直存在于shell中,可以在当前shell中用set | grep name=查看
- 从文件读入
read password < /etc/passwd读入一行 while read passwd doecho $passwd done < /etc/passwd一直循环读,直到不再输入
- read -p “what file do you want to test?" filename 命令替换:
- 命令赋值:VAR=`date`、 VAR=$(date)
- 数值计算:c=`expr $a +4`、c=let $a + 4 、$(($a+$b)) 但也有点区别:有的shell不支持,是否有对非数值进行的先验(expr没有)
- 将变量值设置为某个给定命令的输出,其时是第一种赋值方式的变种
TODAY=`date +%A`动态赋值
引用变量
2、引用变量——的格式是${变量名} $(variable)bar echo $variable bar ${variable}bar
访问不存在的变量只会返回空字符串或0,具体取决与上下文,所以当将某个变量名写错时,不会报错,还能有结果;
变量名区分大小写
3、支持一维数组变量:
[lixn@localhost ~]$ Users=(zsan lisi wangwu zhangsan lisi) 定义一维数组 [lixn@localhost ~]$ echo $Users 索引 zsan [lixn@localhost ~]$ echo ${Users[0]} zsan [lixn@localhost ~]$ echo ${Users[2]} wangwu [lixn@localhost ~]$ echo ${Users} zsan [lixn@localhost ~]$ echo ${Users[*]} zsan lisi wangwu zhangsan lisi [lixn@localhost ~]$ echo ${#Users[*]} 返回数组长度 5 [lixn@localhost ~]$ echo ${#Users[2]} 返回元素值的长度 6 [lixn@localhost ~]$ Users[1]=wlm 修改值 [lixn@localhost ~]$ Account=(${Users[*]}) 数组之间赋值 [lixn@localhost ~]$ echo ${Account[*]} zsan wlm wangwu zhangsan lisi
特殊变量
${#var} 变量的长度
特殊变量由bash自动定义和赋值,用户不能修改。
$$:当前进程号
$?:前一个命令的退出状态,0表示执行成功,1标志执行失败
$0:存储命令本身——位置参数
$1-$n:依次代表命令行参数,当大于9时,用{}括起来,如${10}——位置参数
$#:命令行参数的个数,不包括命令本身
$*:保存了全部的命令行参数。不包含命令本身 $@
$!:后台程序的pid
其他
basename命令——去掉位置参数的路径信息,所以./scropt.sh、/usr/local/bin/script.sh等会被转化为script.sh
Myname is `basename $0`
shift命令——多用于“下一个参数”,shift内置命令每次调用时将所有参数进行一次移位,首先截去$1,然后截去$2....无法将移位逆向进行。
shift也可以一次截去多个变量(shift 3 或者 shift shift shift)多用后者
#!/bin/bash echo "My name is `basename $0` - I was called as $0" echo "I was called with $# parameters." count=1 while [ "$#" -ge "1" ]; doecho "Parameter number $count is: $1"let count=$count+1shift done[lixn@Fedora24 bash_learn]$ ./shift.sh My name is shift.sh - I was called as ./shift.sh I was called with 0 parameters. [lixn@Fedora24 bash_learn]$ ./shift.sh one two three My name is shift.sh - I was called as ./shift.sh I was called with 3 parameters. Parameter number 1 is: one Parameter number 2 is: two Parameter number 3 is: three
$*和$@的使用与区别
删除变量——unset myvar;将变量赋值为空字符串也能实现变量的删除,但与unset不完全相同
转载于:https://www.cnblogs.com/daduryi/p/6627660.html
shell脚本1——变量 $、read、``相关推荐
- 69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量
2019独角兽企业重金招聘Python工程师标准>>> 1.shell脚本介绍: shell是一种脚本语言和传统的开发语言相比,会比较简单: shell有自己语法,可以支持逻辑判断. ...
- Shell脚本编程----变量的使用
接触Linux Shell脚本编程很久了,但是发现每次学完之后就会忘记,这似乎又印证了那句"好记性不如烂笔头"的言语,事实确实如此,坚持写博客,定期回顾,你会感觉很充实. 这是本系 ...
- python 执行shell_从python执行Shell脚本与变量
我有这个代码: opts.info("Started domain %s (id=%d)" % (dom,domid)) 我想从上面执行一个带有参数domid的shell脚本. 这 ...
- 【Linux】shell脚本基础-变量
文章目录 什么是变量? 变量分类: 1. 按照变量的作用分 2. 按照变量的作用域分: 环境变量 用户定义变量 变量的命名与规则: 1) 变量规则测试 2) 关于${} 的使用,拼接测试 3)**能不 ...
- Shell脚本的变量
目录 1.Shell脚本变量简介 2.变量的作用 3.变量的类型 4.自定义变量 4.1自定义变量命名要求 4.2定义与查看变量 4.3赋值时使用的引号 4.4从键盘输入内容为变量赋值 4.5 变量的 ...
- Linux Shell脚本入门教程系列之(三)Shell变量
本文是Linux Shell脚本系列教程的第(三)篇,更多shell教程请看:Linux Shell脚本系列教程 Shell作为一种高级的脚本类语言,也是支持自定义变量的.继上一篇之后,今天就为大家介 ...
- Shell脚本中的return,exit 0,以及 父进程获取子进程的变量
1 Shell脚本中的return,exit 0 shell脚本中,一般在脚本的函数里面使用return语句,函数中使用return语句后,表示函数执行完毕,函数中return语句后面的代码将不再执行 ...
- shell脚本中的变量
shell脚本中的变量 1 变量的定义 2 shell脚本中变量的定义方法 2.1 环境级别 2.2 用户级别 2.3 系统级别 3 变量名称 4 变量的转译 4.1 转译 4.2 声明 4.3 变量 ...
- 7月11日任务 shell介绍、shell结构和执行 、date命令用法、shell脚本中的变量
2019独角兽企业重金招聘Python工程师标准>>> 20.1 Shell脚本介绍 • shell是一种脚本语言 aming_linux blog.lishiming.net ...
- Shell脚本攻略02-玩转变量与环境变量
概述 变量是任何一种编程语言都必不可少的组成部分,用于存放各类数据. 脚本语言通常不需要在使用变量之前声明其类型.只需要直接赋值就可以了. 在Bash中,每一个变量的值都是字符串. 无论你给变量赋值时 ...
最新文章
- 记一次mysql性能优化过程
- Vue 全家桶 + Electron 开发的一个跨三端的应用
- 研发应该懂的binlog知识(下)
- java中调用api的方式(postJsonHTTP)
- 【python 3.6】python读取json数据存入MySQL(一)
- [傅里叶变换及其应用学习笔记] 二十四. 级联,脉冲响应
- TCP的FIN、ACK、SYN、URG、PSH及攻击方式
- 回拨系统服务器,CISCO接入服务器回拨功能的实现
- java求圆弧切线_两个圆的公切线
- 微信小程序-滚动消息通知
- 判断是否为一棵树的子树 Subtree of Another Tree
- 美团笔试--修改矩阵
- 启动react项目报找不到文件的错误
- 俄罗斯最大的盗版资源网站,解封了!
- 凸包(Graham扫描法构建)
- 有个程序猿很忧桑:一个命令rm -rf/ ,他把整个公司删没了
- 数据外泄保护与国土安全部
- C++ 数据存储类型
- 环信即时通讯云iOS版V2.0.9.1服务评测
- 蓝桥杯-【交换瓶子】【2016年省赛B组题解】【C++】
热门文章
- Python学习笔记----try...except...else
- Jira 随便总结
- js 之for..in、表单及事件触发
- 一个网站的诞生- MagicDict开发总结2 [ACCESS的烦恼]
- html用a标签怎么提交表单?
- ad如何镜像器件_使用 Dockerfile 制作镜像
- 基类数组存放派生类_永远不要将派生类数组赋值给基类类型指针
- MATLAB的dir函数
- visio科学图形包_科学网—科研必备:几款好用的流程图工具,助力你的论文/科研绘图...
- python命令行参数作用_Python命令行参数解析模块argparse