与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. 浅谈爬虫 《一》 ===python

    浅谈爬虫 <一> ===python  ‘’正文之前先啰嗦一下,准确来说,在下还只是一个刚入门IT世界的菜鸟,工作近两年了,之前做前端的时候就想写博客来着,现在都转做python了,如果还 ...

  2. Open vSwitch系列之一 Open vSwitch诞生

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs 2006年,SDN诞生于美国GENI项目资助的斯坦福大学Clean Slate课题 ...

  3. Rancher与ARM深化战略合作,“软硬结合”加速边缘计算时代

    时至今日,许多企业已将边缘计算列为战略目标,对于部分企业而言,边缘计算则已成为它们势在必行的部分.而随着对应用软件和硬件能力的需求不断增长,容器和Kubernetes已发展为边缘计算领域备受瞩目的一项 ...

  4. 百万年薪python之路 -- 异常处理

    异常处理 1.错误的分类: 1.语法错误:(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def test: pass #语法错 ...

  5. < 配置jupyer notebook遇到的问题 - 500 : Internal Server Error >

    < anaconda配置jupyer notebook遇到的问题 - 500 : Internal Server Error > 问题描述: 我的jupyer notebook是在anac ...

  6. 文本查重算法SimHash

    1.介绍 爬虫采集了大量的文本数据,如何进行去重?可以使用文本计算MD5,然后与已经抓取下来的MD5集合进行比较,但这种做法有个问题,文本稍有不同MD5值都会大相径庭, 无法处理文本相似问题.另一种方 ...

  7. oc基本知识

    (一)构造函数 h文件 #import <Foundation/Foundation.h> @interface Student : NSObject { NSString *_name; ...

  8. fenby C语言 P13

    开关语句switch(变量) switch(weekday) ↓ 数字 default:异常处理 case-break #include <stdio.h> int main() { in ...

  9. redis 基本类型和命令(一)

    一.Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). (1) string类型是Redis最基本的数 ...

  10. 在虚拟机上的关于Apache(阿帕奇)(1)开启Apache服务以及介绍基础服务

    我们来开始讲述Apache(阿帕奇)服务 小知识: Apache   使得一台服务器上放很多网站,网站同时访问  可以使网站更安全(木马如果是root权限  如果webshell  apache 可用 ...