与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、``的更多相关文章

  1. shell脚本学习-变量

    跟着RUNOOB网站的教程学习的笔记 shell变量 shell变量的命名 定义变量时,变量名不加美元符号($,PHP语言中需要),如: name="runoob" 注意,变量名与 ...

  2. shell脚本-高级变量

    shell脚本-高级变量 字符串变量切片 ${#var}: 返回字符串变量var的长度 ${var:offset}: 返回字符串变量var中从第offset个字符后(不包括第offset 个字符)的字 ...

  3. shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量

    7月11日任务 20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法20.4 shell脚本中的变量 20.1 shell脚本介绍 1.shell脚本语言是linu ...

  4. shell脚本变量

    既然是变量,自然分变量名和变量值,在使用的时候一定要注意哪些地方需要用变量名,哪些地方需要用变量的值. 自定义变量 shell变量不需要声明,随用随定义,给变量赋值的时候要注意 shell是空格敏感的 ...

  5. Linux Shell 01 脚本与变量

    一 脚本的创建和执行 1. 创建文件*.sh,文件后缀为sh 2. 编辑脚本 首行必须为:#!/bin/bash   #指定解释脚本的shell 3. 赋权 chmod u+x a.sh 4. 执行 ...

  6. 通过shell脚本获取日期,并赋给变量

    通过shell获取当前8位日期,并赋给变量,并且使用变量作为文件名,建立文件夹 代码如下: ls_date=`date +%Y%m%d` mkdir ${ls_date} 上面两句代码虽然简单 但是在 ...

  7. shell 脚本编程之特殊变量

    $0 当前脚本的文件名$n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2.$# 传递给脚本或函数的参数个数.$* 传递给脚本或函数的所有参数.$@ ...

  8. 《Linux命令行与shell脚本编程大全》 第六章环境变量

    很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息. 6.1 什么是环境变量: bash shell用一个叫环境变量(environment variable)的特性来存储有关shel ...

  9. Shell脚本笔记(二)Shell变量

    Shell变量 一)全局环境变量 全局变量对于定义它的shell和其子shell都是可见的,但如果生成它的shell被终止,全局变量也就消失了.另外全局变量会被子shell的同名变量覆盖. #定义一个 ...

  10. Shell脚本的学习笔记一:变量

    三种变量: 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量. 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需 ...

随机推荐

  1. Unity3D 通过JSON查询天气

    一.天气查询API 获取天气信息,首先要找到提供天气数据的接口,我使用的是高德地图免费为我们提供的,网址为 https://lbs.amap.com/api/webservice/guide/api/ ...

  2. Git & Github 使用教程【1】入门篇

    Github教程 1-1 版本管理工具简介 主要作用:备份文件.记录历史.回到过去.多端共享.独挡一面.团队协作 2-1 版本管理工具发展历史 3-1 Git下载和安装[略] 3-2 linux下安装 ...

  3. Kubernetes1-K8s的简单介绍

    一.简介 1.什么是Kubernetes 简称K8s,用8代替8个字符“ubernerte”而成的速写,K8s是一个开源的容器编排平台,它是一个跨主机集群的开源容器调度平台,用于管理云平台中多个主机上 ...

  4. 如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?

    OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了一些想法,之前也有了解过,不过并没有深入. 先看个截图: 一段再简单不过的代码了,大家注意看到 count 字段下面的绿色波浪线了吗,我们 ...

  5. 通过FeignClient接收shaded的javabean的JSON序列化

    问题说明 最近做了关于flink的需求. 现在需要通过HTTP访问FLINK的 RESTAPI, rest 接口的JSON 非常庞大而复杂. 那么怎么去完整的接收数据呢? 方法一就是手写部分需要的Ja ...

  6. Oracle数据库 常见的SQL题,复习

    01.查询员工表所有数据,并说明使用*的缺点 select * from emp 02.查询职位(JOB)为'PRESIDENT'的员工的工资 select sal from emp where jo ...

  7. Hadoop 在 windows 7 64位的配置(一)|非cygwin

    参照原文   http://blog.csdn.net/supperman_009/article/details/39991809 环境: Hadoop-2.4.1 Windows 7 64位 jd ...

  8. OptimalSolution(4)--字符串问题(2)进阶

    一.将整数字符串转成整数值 二.判断字符数组中是否所有的字符都只出现过一次 三.在有序但含有空的数组中查找字符串 四.数组中两个字符串的最小距离 五.添加最少字符使字符串整体都是回文字符串 六.括号字 ...

  9. vue-music 跨域获取QQ音乐歌曲播放源

    这个问题困扰了我很久,一直获取不到正确的播放源,qq对这块限制更加严格了 按照之前老师在视频中的写法,已经不能获取到播放源了 下面来分析一下正确的播放源url:http://dl.stream.qqm ...

  10. Azure 上的物联网产品介绍

    微软云Azure上物联网产品提供了从设备接入到设备与云的双向通信,到数据在云中存储,到数据分析,最后到数据展示的完整解决方案,本文主要介绍一些基本的概念,后续的章节中,会详细介绍每款产品的使用方法及步 ...