Linux中的变量有环境变量和用户自定义变量,关于环境变量,可以查看这篇博客:linux环境变量

本文主要针对的是用户在shell脚本中定义的变量,但是环境变量也可以在shell脚本中使用。

普通变量

注意事项:

  1. 变量名以英文字母或者下划线开头,但是不能以数字开头
  2. 变量名区分大小写
  3. 变量名与等号之间,等号与变量值之间不要有空格
  4. 只有在使用变量的值的时候,才在变量名之前加$,其他情况,比如删除、赋值、循环迭代都不用加$
  5. 如果一行只有一条命令,则每一行不用以分号结尾,每一条命令以换行分隔
  6. 如果一行有多条命令,则每一条命令以分号分隔,但建议每行只有一条命令
  1. #!/bin/bash
  2. #文件名:test.sh
  3. name="beyond"
  4. echo $name

  执行脚本:

  1. ubuntu@ubuntu:~$ ./test.sh
  2. beyond
  3. ubuntu@ubuntu:~$

  

  有时候在使用变量的时候,变量名后面会跟着一些字符,如果这些字符与变量名之间没有间隔,那么,这些字符也将被认为是变量的一部分,即$nameHello,解释器回去找$nameHello,而不是找$name,可已使用两种方法,一种是使用空格分隔,另外一种使用花括号将变量名括起来(不要将$括起来)。如下例

  1. #!/bin/bash
  2. #文件名:test.sh
  3. name="beyond"
  4. echo "one",$name
  5. echo "two",$nameHello
  6. echo "three",$name hello
  7. echo "four",${name}hell

  执行脚本:

  1. ubuntu@ubuntu:~$ ./test.sh
  2. one,beyond
  3. two,
  4. three,beyond hello
  5. four,beyondhell

  

  从用户键盘读取数据并赋值给变量,使用:read [-p "提示信息"] 变量名

  1. #!/bin/bash
  2. #文件名:test.sh
  3.  
  4. #输出一段话,并等待用户输入,输入的内容赋值给后面的变量
  5. read -p "please input your name:" name
  6. echo "welcome ${name}"

  执行脚本:

  1. ubuntu@ubuntu:~$ ./test.sh
  2. please input your name:beyond
  3. welcome beyond
  4. ubuntu@ubuntu:~$

  

  单引号与双引号的区别:

  1、在单引号中,变量不能被解析;在双引号中变量可以被解析。

  2、转义字符在单引号和双引号中都不会转义,反引号的作用是将反引号括起来的命令(括起来的内容会被当成命令执行),然后将结果赋值给一个变量。

  注意,使用反引号将命令括起来之后,如果不将运行整个命令赋值给一个变量,那么就会将反引号中的命令的执行结果当成shell命令执行。

  1. #!/bin/bash
  2. #文件名:test.sh
  3.  
  4. name="beyond"
  5. #双引号括起来的变量能解析
  6. echo one,"$name"
  7.  
  8. #双引号括起来的变量不能解析,会输出变量名
  9. echo two,'$name'
  10.  
  11. #转义字符在单引号和双引号中都不会转义
  12. echo three"$name\t hello"
  13. echo four'$name\t hello'
  14.  
  15. #echo `${name} \t hello`
  16. #上面这条命令会出错,因为bash会将beyond \t hello当做shell命令执行
  17.  
  18. str=`echo $name \t hello`
  19. echo $str
  20.  
  21. str=`date`
  22. #date是在命令行中获取当前时间
  23. echo "current time is $str"  

  执行脚本:

  1. ubuntu@ubuntu:~$ ./test.sh
  2. one,beyond
  3. two,$name
  4. threebeyond\t hello
  5. four$name\t hello
  6. beyond t hello
  7. current time is 2018 01 07 星期日 18:50:59 CST

  变量的删除使用unset 变量名,注意此时变量名之前不要加$符号

  1. #!/bin/bash
  2. #文件名:test.sh
  3.  
  4. name="beyond"
  5.  
  6. echo one,"$name"
  7.  
  8. //使用unset来删除变量
  9. unset name
  10.  
  11. echo $name

  执行脚本:

  1. ubuntu@ubuntu:~$ ./test.sh
  2. one,beyond
  3.  
  4. ubuntu@ubuntu:~$

 

位置变量:

咱们平时使用ls 查看当前目录下的文件时,常常会带-l -a -i等参数,这些参数就是位置变量,使用这些的方法:用$加数字(0-9)来获取,如果数字大于9时,则会使用数字的最高位所代表的位置变量,然后这个位置变量会拼接上数字剩下的部分,所以说shell命令行最多可以传递9个参数(如果参数过多,可以将多个参数连接为一个参数来扩充),也可以使用${11}来获取第11个位置参数。

  1. #!/bin/bash
  2. #文件名:test.sh
  3. echo $0
  4. echo $1," ",$2," ",$3," ",$4," ",$5
  5. echo $6," ",$7," ",$8," ",$9," ",$10
  6. echo $11," ",$12

  执行脚本:

  1. ubuntu@ubuntu:~$ ./test.sh a b c d e f g h i j k
  2. ./test.sh
  3. a, ,b, ,c, ,d, ,e
  4. f, ,g, ,h, ,i, ,a0
  5. a1, ,a2
  6. ubuntu@ubuntu:~$

  

预定义变量:

预定义变量名 含义
$0或者${0} 当前执行的进程名/脚本名/程序名
$#或者${#} 命令行中位置参数的总数量
$*或者${*} 所有位置参数的内容
$?或者${?} 上一条命令执行的返回结果,0表示正常,非0表示异常或出错

  

  1. #!/bin/bash
  2. #文件名:test.sh
  3.  
  4. echo "进程名:"$0
  5. echo "位置参数的数量:"$#
  6. echo "所有位置参数的内容:"$*
  7.  
  8. #执行一条非法语句,执行异常,返回非0
  9. `echo "hello world"`
  10. echo "上一条命令的执行结果:"$?
  11.  
  12. #执行一条合法语句,正常运行完毕,返回0
  13. str=`echo "hello world"`
  14. echo "上一条命令的执行结果:"$?

  执行脚本:

  1. ubuntu@ubuntu:~$ ./test.sh a b c d e f g
  2. 进程名:./test.sh
  3. 位置参数的数量:7
  4. 所有位置参数的内容:a b c d e f g
  5. ./test.sh: line 8: hello: command not found
  6. 上一条命令的执行结果:127
  7. 上一条命令的执行结果:0
  8. ubuntu@ubuntu:~$

  

数组

shell脚本--变量与数组的更多相关文章

  1. SHELL脚本编程-普通数组(列表)和关联数组(字典)

    SHELL脚本编程-普通数组(列表)和关联数组(字典) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组相关概述 变量: 存储单个元素的内存空间 数组: 存储多个元素的连续的 ...

  2. shell脚本变量

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

  3. 如何在shell脚本中导出数组供子进程使用

    功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供一组环境变量.export可新增,修改或删除环境变量 ...

  4. shell脚本函数与数组

    前言 之前写过一篇关于shell脚本流程控制总结,这次继续写关于shell脚本的问题.本篇文章主要包含shell脚本中的函数以及数组的用法介绍.同时也涵盖了一些字符串处理以及shell脚本比较使用的小 ...

  5. shell脚本函数及数组

    函数介绍: 函数function是由若干条shell命令组成的语句块,实现代码重用和模块话编程. 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部 ...

  6. SHELL脚本--变量(基础)

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 变量存在于内存中.假设变量str,设置或修改变量属性时,不带$ ...

  7. SHELL脚本--变量

    环境变量 环境变量就是运行在"环境"上下文的,在这个上下文都可以引用.例如,常见的cd.ls等命令严格来说应该使用绝对路径如/bin/ls来执行,由于/bin目录加入到了PATH环 ...

  8. shell脚本变量$#,$*,$$,$@,$0,$1,$2,$?的含义

    本文转录:https://blog.csdn.net/kejiaming/article/details/51859503 参数说明: $# 是传给脚本的参数个数 $ 是脚本本身的名字 $ 是传递给该 ...

  9. Shell脚本变量与判断

    变量 环境变量 局部变量 declare 定义变量类型 本地变量 local 在函数中使用 变量类型: 数值型: 1.整形 2.浮点型 3.布尔型 0 1 (真 假) (true false) 字符串 ...

随机推荐

  1. 求助pycharm里import pandas遇到No module named pandas怎么办

    目测是安转pandas库之后pycharm对库的检索没有更新.(能理解意思就行,我也是小白,不会专业术语,刚巧我也遇到了这样的问题所以来回答)我当时解决这个问题也算是瞎猫遇见死耗子. &amp ...

  2. BZOJ1024:[SCOI2009]生日快乐(DFS)

    Description windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕. 现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的 ...

  3. 整数划分 NBUT - 1046

    题目很简单,把一个正整数分割成N个正整数之和.但是你得把所有的划分方法列出来,以字典序升序排序.对于每种划分方法,小的数字在前面. 思路:直接深度优先搜索,注意要判断前一位一定会比将要放入答案的因子小 ...

  4. Linux下安装ElasticSearch 5 和配置外部访问

    https://www.cnblogs.com/hts-technology/p/8477291.html (一)ElasticSearch需要jdk1.8以上版本的支持,所以需要先安装jdk.lin ...

  5. 清空visual studio 开发缓存

    C:\Users\Administrator\AppData\Local\Temp\Temporary ASP.NET Files C:\Windows\Microsoft.NET\Framework ...

  6. C++多线程中用临界区控制全局变量的访问冲突问题

    困扰了我很长时间的多线程访问全局变量今天终于解决了,所以得记录一下..控制全局变量的方法很多,有信号量.临界区等..这里我记录一个用临界区控制访问冲突的例子.非常好用. #include <wi ...

  7. ubuntu apt-get 出现NO_PUBKEY的解决方案

    https://blog.csdn.net/u014221090/article/details/77524682

  8. ES6中Object.assign() 方法

    ES6中Object.assign() 方法 1. 对象合并Object.assign 方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象上.如下代码演示: var targ ...

  9. Percona XtraDB Cluster集群

    官网参考地址: https://www.percona.com/doc/percona-xtradb-cluster/LATEST/configure.html 前期准备: 都用的root权限或使用s ...

  10. python 3.6练习题(仿购物车)

    opop = [ ('Iphone', 9800), ('Bike', 800), ('Mac Pro', 12000), #定义商品列表 ('Pyhon book', 120), ('Telas', ...