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启动的程序,都能访问环境变量,有些程序需 ...
随机推荐
- 浅谈爬虫 《一》 ===python
浅谈爬虫 <一> ===python ‘’正文之前先啰嗦一下,准确来说,在下还只是一个刚入门IT世界的菜鸟,工作近两年了,之前做前端的时候就想写博客来着,现在都转做python了,如果还 ...
- Open vSwitch系列之一 Open vSwitch诞生
Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs 2006年,SDN诞生于美国GENI项目资助的斯坦福大学Clean Slate课题 ...
- Rancher与ARM深化战略合作,“软硬结合”加速边缘计算时代
时至今日,许多企业已将边缘计算列为战略目标,对于部分企业而言,边缘计算则已成为它们势在必行的部分.而随着对应用软件和硬件能力的需求不断增长,容器和Kubernetes已发展为边缘计算领域备受瞩目的一项 ...
- 百万年薪python之路 -- 异常处理
异常处理 1.错误的分类: 1.语法错误:(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def test: pass #语法错 ...
- < 配置jupyer notebook遇到的问题 - 500 : Internal Server Error >
< anaconda配置jupyer notebook遇到的问题 - 500 : Internal Server Error > 问题描述: 我的jupyer notebook是在anac ...
- 文本查重算法SimHash
1.介绍 爬虫采集了大量的文本数据,如何进行去重?可以使用文本计算MD5,然后与已经抓取下来的MD5集合进行比较,但这种做法有个问题,文本稍有不同MD5值都会大相径庭, 无法处理文本相似问题.另一种方 ...
- oc基本知识
(一)构造函数 h文件 #import <Foundation/Foundation.h> @interface Student : NSObject { NSString *_name; ...
- fenby C语言 P13
开关语句switch(变量) switch(weekday) ↓ 数字 default:异常处理 case-break #include <stdio.h> int main() { in ...
- redis 基本类型和命令(一)
一.Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). (1) string类型是Redis最基本的数 ...
- 在虚拟机上的关于Apache(阿帕奇)(1)开启Apache服务以及介绍基础服务
我们来开始讲述Apache(阿帕奇)服务 小知识: Apache 使得一台服务器上放很多网站,网站同时访问 可以使网站更安全(木马如果是root权限 如果webshell apache 可用 ...