Shell 变量

变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

  • 首个字符必须为字母(a-z,A-Z)。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

除了显式地直接赋值,还可以用语句给变量赋值,如:

for file in `ls /etc`

以上语句将 /etc 下目录的文件名循环出来。

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

#!/bin/bash
myname="konsy"
readonly myname
myname="dog"

运行脚本,结果如下:
./konsy.sh:line 16:myname:readonly variable

删除变量

使用 unset 命令可以删除变量。语法:

unset variable_name

变量被删除后不能再次使用。unset 命令不能删除只读变量。

变量类型

运行shell时,会同时存在三种变量:
1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

Shell 字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。
单引号

str='this is a string'

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

双引号

your_name='konsy'
str="Hello, I know your are \"$your_name\"! \n"

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

拼接字符串

your_name="konsy"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1

获取字符串长度

string="abcd"
echo ${#string} #输出 4

提取子字符串
以下实例从字符串第 2 个字符开始截取 4 个字符:

string="konsy is a good boy"
echo ${string:1:4} # 输出 onsy

查找子字符串
查找字符 “i 或 s” 的位置:

string="konsy is a good boy"
echo `expr index "$string" is`  # 输出 4

注意: 以上脚本中 “`” 是反引号,而不是单引号 “’”

Shell 数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。

定义数组
在Shell中,用括号来表示数组,数组元素用”空格”符号分割开。定义数组的一般形式为:

数组名=(值1 值2 ... 值n)

例如:

array_name=(value0 value1 value2 value3)

或者

array_name=(
value0
value1
value2
value3
)

还可以单独定义数组的各个分量:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

可以不使用连续的下标,而且下标的范围没有限制。

读取数组
读取数组元素值的一般格式是:

${数组名[下标]}

例如:

valuen=${array_name[n]}

使用@符号可以获取数组中的所有元素,例如:

echo ${array_name[@]}

获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

Shell 注释
以”#”开头的行就是注释,会被解释器忽略。
sh里没有多行注释,只能每一行加一个#号。只能像这样:

#--------------------------------------------
# 这是一个注释
# author:菜鸟教程
# site:www.runoob.com
# slogan:学的不仅是技术,更是梦想!
#--------------------------------------------
##### 用户配置区 开始 #####
#
#
# 这里可以添加脚本描述信息
#
#
##### 用户配置区 结束  #####

Shell——变量详解及注意点相关推荐

  1. Shell test命令(Shell [])详解,附带所有选项及说明

    test 是 Shell 内置命令,用来检测某个条件是否成立.test 通常和 if 语句一起使用,并且大部分 if 语句都依赖 test. test 命令有很多选项,可以进行数值.字符串和文件三个方 ...

  2. shell脚本详解(十二)——Here Document免交互及Expect自动化交互

    shell脚本详解(十二)--Here Document免交互及Expect自动化交互 一.Here Document 免交互 1.格式 2.注意事项 3.免交互方式实现对行数的统计,将要统计的内容置 ...

  3. shell脚本详解(四)——循环语句之while循环和until循环(附加例题及解析)

    shell脚本详解(四)--循环语句之while循环和until循环 一.until循环 1.循环结构 2.例题 二.while循环 1.循环结构 2.例题(每个人的思路不同,会导致脚本内容不一样,这 ...

  4. shell脚本详解(三)——循环语句之for循环

    shell脚本详解(三)--循环语句之for循环 一.echo命令 – 输出字符串或提取Shell变量的值 1.格式 2.常用参数 3.示例 二.for循环语句 1.for循环结构 2.例题 ①.例题 ...

  5. Linux环境变量详解

    Linux环境变量详解 环境变量是操作系统环境设置的变量,适用于整个系统的用户进程. 环境变量分类 按照权限分类 系统级:系统级的环境变量是每个登录到系统的用户都要读取的系统变量 用户级:用户级的环境 ...

  6. ubuntu下环境变量详解 bashrc, profile, environment

    ubuntu下环境变量详解 bashrc, profile, environment 本博客转载自:http://blog.csdn.net/hipkai/article/details/415486 ...

  7. Shell语法详解专栏目录

    Shell语法详解专栏 1. [Shell详解-1]:概论.注释 2. [Shell详解-2]:变量.默认变量.数组 3. [Shell详解-3]:expr命令.read命令 4. [Shell详解- ...

  8. shell脚本详解(一)——初学shell脚本必看哦

    shell脚本详解 一.Shell脚本概述 1.1.shell脚本的概念 1.2.shell脚本应用场景 1.3.shell脚本能干什么 1.4. shell的作用--命令翻译器,"翻译官& ...

  9. 在oracle环境变量里,oracle环境变量详解

    共享存储文件系统(NFS) 通常情况下,ORACLE_SID这个环境变量全称Oracle System Identifier,,用于在一台服务器上标识不同的实例,默认情况下,实例名就是ORACLE_S ...

最新文章

  1. 比Spring简单的IoC容器
  2. FckEditor-未能映射路径/UserFiles/image/
  3. 用状态机STATE MACHINE实现有选择的文件转换
  4. 了解JVM运行时的内存分配
  5. 增强型的for循环linkedlist_38. 为什么千万别用for循环迭代LinkedList
  6. linux中lsattr命令,Linux命令(16)——chattr与lsattr命令
  7. IT人母亲的美国之行(3)
  8. 【SQL】使用SQL求1-100的质数
  9. SSL安全证书:免费的SSL证书申请渠道有哪些?
  10. python3解压zip_python3:rar解压缩
  11. HDU2066---------Dijkstra算法代码
  12. 一群阿里码农的公益实践:用技术禁毒、打拐
  13. SIM7600CE TCP AT指令
  14. 最通俗易懂——TCP/IP协议,让你明明白白!
  15. matlab 画图基本
  16. MyBatis 一个动态sql的问题(动态SQL基于OGNL表达式)<if test=“state == ‘0‘“>单个的字符要使用双引号,改为<if test=‘state == “1“‘>或
  17. Android 动画
  18. 详解CSS设置默认字体样式
  19. Zotero文献管理
  20. Could not install the app on the device, read the error above for details. Make sure you have an And

热门文章

  1. java base64 显示不完整_如何解决CAD图纸显示不完整、图纸无效?一分钟教你,不允许错过...
  2. linux交叉编译+驱动,请教驱动程序交叉编译问题(初学)
  3. ds图—最小生成树_Python实现最小生成树
  4. Linux:mkdir 创建多级目录
  5. RabbitMQ负载均衡
  6. 将 EndNote 文献信息导出成 BibTeX 格式(可根据label排序)以及出现三个问号
  7. 如何写一篇合格的论文(清华大学刘知远)
  8. vue项目 :npm命令安装jquery
  9. PC电脑 屏幕竖直截长屏、本地视频转码、本地视频转gif动画、gif压缩等
  10. 华为ac控制器web配置手册_欧姆龙AC伺服系统1S系列产品型号说明及功能介绍