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
do
echo $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[]}
zsan
[lixn@localhost ~]$ echo ${Users[]}
wangwu
[lixn@localhost ~]$ echo ${Users}
zsan
[lixn@localhost ~]$ echo ${Users[*]}
zsan lisi wangwu zhangsan lisi
[lixn@localhost ~]$ echo ${#Users[*]} 返回数组长度 [lixn@localhost ~]$ echo ${#Users[]} 返回元素值的长度 [lixn@localhost ~]$ Users[]=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 $`
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=
while [ "$#" -ge "" ]; do
echo "Parameter number $count is: $1"
let count=$count+
shift
done [lixn@Fedora24 bash_learn]$ ./shift.sh
My name is shift.sh - I was called as ./shift.sh
I was called with 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 parameters.
Parameter number is: one
Parameter number is: two
Parameter number is: three
$*和$@的使用与区别
删除变量——unset myvar;将变量赋值为空字符串也能实现变量的删除,但与unset不完全相同
shell脚本1——变量 $、read、``的更多相关文章
- shell脚本学习-变量
跟着RUNOOB网站的教程学习的笔记 shell变量 shell变量的命名 定义变量时,变量名不加美元符号($,PHP语言中需要),如: name="runoob" 注意,变量名与 ...
- shell脚本-高级变量
shell脚本-高级变量 字符串变量切片 ${#var}: 返回字符串变量var的长度 ${var:offset}: 返回字符串变量var中从第offset个字符后(不包括第offset 个字符)的字 ...
- shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
7月11日任务 20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法20.4 shell脚本中的变量 20.1 shell脚本介绍 1.shell脚本语言是linu ...
- shell脚本变量
既然是变量,自然分变量名和变量值,在使用的时候一定要注意哪些地方需要用变量名,哪些地方需要用变量的值. 自定义变量 shell变量不需要声明,随用随定义,给变量赋值的时候要注意 shell是空格敏感的 ...
- Linux Shell 01 脚本与变量
一 脚本的创建和执行 1. 创建文件*.sh,文件后缀为sh 2. 编辑脚本 首行必须为:#!/bin/bash #指定解释脚本的shell 3. 赋权 chmod u+x a.sh 4. 执行 ...
- 通过shell脚本获取日期,并赋给变量
通过shell获取当前8位日期,并赋给变量,并且使用变量作为文件名,建立文件夹 代码如下: ls_date=`date +%Y%m%d` mkdir ${ls_date} 上面两句代码虽然简单 但是在 ...
- shell 脚本编程之特殊变量
$0 当前脚本的文件名$n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2.$# 传递给脚本或函数的参数个数.$* 传递给脚本或函数的所有参数.$@ ...
- 《Linux命令行与shell脚本编程大全》 第六章环境变量
很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息. 6.1 什么是环境变量: bash shell用一个叫环境变量(environment variable)的特性来存储有关shel ...
- Shell脚本笔记(二)Shell变量
Shell变量 一)全局环境变量 全局变量对于定义它的shell和其子shell都是可见的,但如果生成它的shell被终止,全局变量也就消失了.另外全局变量会被子shell的同名变量覆盖. #定义一个 ...
- Shell脚本的学习笔记一:变量
三种变量: 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量. 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需 ...
随机推荐
- Axios 详解
首先祝广大程序猿们节日快乐! 一.axios简介 基于promise,用于浏览器和node.js的http客户端 二.特点 支持浏览器和 node.js 支持 promise 能拦截请求和响应 能转换 ...
- ajax 轮询(适合web端二维码请求)
(前几天 一直弄二维码轮询登录 想了半天 总算弄出来了 分享给大家 ^-^) 轮询: 所谓轮询 肯定需要 setInterval 但是怎么加ajax请求 需要有点小问题而且轮询成功后需要停 ...
- PHP实现阿里云OSS文件上传(支持批量)
上传文件至阿里云OSS,整体逻辑是,文件先临时上传到本地,然后在上传到OSS,最后删除本地的临时文件(也可以不删,具体看自己的业务需求),具体实现流程如下: 1.下载阿里云OSS对象上传SDK(P ...
- logistic回归 python代码实现
本代码参考自:https://github.com/lawlite19/MachineLearning_Python/blob/master/LogisticRegression/LogisticRe ...
- split分割文件与数据
split主要用途:在之前计算机发展的时候,我们必须分割文件,才能将大量数据放入多张软盘中,而今我们分割文件有了其他的目的,比如提高可读性,生成日志以及发送有大小限制的E-mail附件. 工作原理:s ...
- Python+Keras+TensorFlow车牌识别
这个是我使用的车牌识别开源项目的地址:https://github.com/zeusees/HyperLPR Python 依赖 Anaconda for Python 3.x on Win64 Ke ...
- 在windows下用with open 打开html文件报gbk错误
with open('xx.html' , 'rb' ,enconding='utf-8')as f: 可能原因是由于HTML是在Linux下开发的,与windons 系统编码不兼容
- 键盘常见ascii码值
回车事件最常见,码值13 ESC键: VK_ESCAPE (27) 回车键: VK_RETURN (13) TAB键: VK_TAB (9) Caps Lock键: VK_CAPITAL (20) S ...
- [UWP]使用PointLight并实现动画效果
1. Composition Lighting UWP中的Composition Light是一组可以创建3D光照的API,它明明十分好玩而且强大, 但博客园几乎没有相关文章(用UWP或pointli ...
- mysql分组和去重同时使用
这是我的数据结构: 这是我的统计SQL