1、begin

  1. #!/bin/bash
  2. echo "Hello World !"

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo 命令用于向窗口输出文本。

2、运行shell的2种方式

2.1、作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

  1. chmod +x ./test.sh #使脚本具有执行权限
  2. ./test.sh #执行脚本

2.2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

  1. /bin/sh test.sh
  2. /bin/php test.php

这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

3、变量

3.1、定义变量

  1. you_beautiful="xiaomengxin.com"

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

  1. 、命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  2. 、中间不能有空格,可以使用下划线(_)。
  3. 3 不能使用标点符号。
  4. 4 、不能使用bash里的关键字(可用help命令查看保留关键字)。

3.2、使用变量

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

  1. your_name="jiayn"
  2. echo $your_name
  3. echo ${your_name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。

已定义的变量,可以被重新定义,如:

  1. your_name="minglu"
  2. echo $your_name
  3. your_name="wang"
  4. echo $your_name

3.3、只读变量

  1. #!/bin/bash
  2. readonly xiao_mengxin="真可爱"
  3. echo ${xiao_mengxin}
  4. xiao_mengxin="太丑了"
  5. echo ${xiao_mengxin}

执行结果报错:

  1. 真可爱
  2. 真可爱
  3. /tmp//main.: xiao_mengxin: readonly variable

3.4、删除变量

  1. unset variable_name

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

  1. #!/bin/bash
  2. xiao_mengxin="真可爱"
  3. echo ${xiao_mengxin}
  4. unset xiao_mengxin
  5. echo ${xiao_mengxin}

执行结果:

  1. 真可爱

3.5、变量类型

运行shell时,会同时存在三种变量:

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

4、字符串

4.1、字符串表示

字符串可以用单引号,也可以用双引号,也可以不用引号

  1. str='this is a string'

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
  1. #!/bin/bash
  2. xiao_mengxin='可爱'
  3. echo ${xiao_mengxin}
  4. str="我知道你的名字叫\"${xiao_mengxin}\"!\n"
  5. echo -e $str

输出:

  1. 可爱
  2. 我知道你的名字叫"可爱"!

双引号的优点:

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

4.2、获取字符串长度

  1. #!/bin/bash
  2. xiao_mengxin='可爱ne'
  3. echo ${#xiao_mengxin}

输出结果:8

4.2、提取子字符串

  1. #!/bin/bash
  2. xiao_mengxin='zen me zhe me ke ai ne'
  3. :} #是不是看起来很熟悉,有没有想到python里面的切片

输出结果:zen m

4.2、查找子字符串

  1. #!/bin/bash
  2. xiao_mengxin='zen me zhe me ke ai ne'
  3. echo `expr index "$xiao_mengxin" km`

输出结果:5

5、数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

5.1、定义数组

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

  1. array_name=(value0 value1 value2 value3)

5.2、读取数组

  1. ${array_name[n]}
  1. #!/bin/bash
  2. array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
  3. ]}

输出结果:xiao_luming

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

  1. ${array_name[@]}
  1. ${array_name[*]}

5.3、获取数组的长度

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

  1. #!/bin/bash
  2. array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
  3. echo ${#array_name[@]}
  4. # 或者
  5. echo ${#array_name[*]}
  6. # 取得数组单个元素的长度
  7. ]}

输出结果:

  1.  

6、注释

以 # 开头的行就是注释,会被解释器忽略。

多行注释可以使用以下格式:

  1. #!/bin/bash
  2.  
  3. :<<!
  4. array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
  5. echo ${#array_name[@]}
  6. # 或者
  7. echo ${#array_name[*]}
  8. # 取得数组单个元素的长度
  9. ]}
  10. !
  11.  
  12. echo "qunaerle"

或者:

  1. #!/bin/bash
  2.  
  3. :<<Esfdsfdsf
  4. array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
  5. echo ${#array_name[@]}
  6. # 或者
  7. echo ${#array_name[*]}
  8. # 取得数组单个元素的长度
  9. ]}
  10. Esfdsfdsf #一致即可
  11. echo "qunaerle"

Shell学习心得(一):变量的更多相关文章

  1. Shell学习之环境变量配置文件(三)

    Shell学习之环境变量配置文件 目录 环境变量配置文件简介 环境变量配置文件作用 其他配置文件和登录信息 环境变量配置文件简介 环境变量配置文件简介 环境变量配置文件中主要是定义对系统操作环境生效的 ...

  2. Shell学习之Bash变量详解(二)

    Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...

  3. shell学习笔记3---shell变量

    Shell变量的定义.赋值和删除 脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有 ...

  4. Shell学习笔记 - 环境变量配置文件(转)

    一.source命令 功能:在当前bash环境下读取并执行配置文件中的命令 1. 命令格式 source 配置文件  或  . 配置文件 2. 命令示例 [root@localhost ~]# sou ...

  5. Shell学习笔记 - 环境变量配置文件

    一.source命令 功能:在当前bash环境下读取并执行配置文件中的命令 1. 命令格式 source 配置文件  或  . 配置文件 2. 命令示例 [root@localhost ~]# sou ...

  6. Shell学习心得(二):传递参数、运算符

    1.传递参数 可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 向脚本传递三个参数, ...

  7. shell学习笔记之变量(一)

    一.普通变量 1.使用变量之前通常并不需要事先声明,通常赋值的时候创建他们2.默认所有的变量都被看做字符串,并且以字符串存储3.变量区分大小写4.变量名前面添加$符号来访问变量,赋值的时候只需要使用变 ...

  8. Shell学习心得(四):流程控制

    一.if else 1. if if 语句语法格式: if condition then command1 command2 ... commandN fi 写成一行(适用于终端命令提示符): ]; ...

  9. shell 学习笔记3-shell变量扩展

    一.特殊位置参数变量 1.特殊位置参数变量 在shell中比如:$0.$1.$#,等被称为特殊位置参数变量,当命令行.函数.脚本执行等处传递参数时,就需要使用位置参数变量 参数说明如下: 2.示例$1 ...

随机推荐

  1. 详细的<select>下拉列表详解

    我们使用表单下拉列表选择数据,如省.市.县.年.月等数据,我们即可使用下拉菜单表单进行设置.select 我下拉列表菜单标签Option为下拉列表数据标签Value 为Option的数据值(用于数据的 ...

  2. Unity5 assetbundle笔记

    Assetbundle api试验----打包选项试验--------结论:BuildAssetBundleOptions说明:------------None: 把所有以来资源到到一个包里----- ...

  3. 【转】java中PriorityQueue优先级队列使用方法

    优先级队列是不同于先进先出队列的另一种队列.每次从队列中取出的是具有最高优先权的元素. PriorityQueue是从JDK1.5开始提供的新的数据结构接口. 如果不提供Comparator的话,优先 ...

  4. var与let、const的区别

    var与let.const 一.var声明的变量会挂载在window上,而let和const声明的变量不会: var a = 100;console.log(a,window.a); // 100 1 ...

  5. 《T-SQL查询》读书笔记Part 2.执行计划

    一.关于执行计划 执行计划是优化器生成的用于确定如何处理一个给定查询的“工作计划”.一个计划包含一组运算符,通常按照特定的顺序来应用这些运算符.此外,一些运算符可以在它们之前的运算符还在处理时被应用( ...

  6. elasticsearch 的安装配置与spring boot的整合应用

    linux上的elasticsearch安装 一.下载elasticsearch 直接进入elasticsearch的官网,下载最新的安装包:https://www.elastic.co/downlo ...

  7. TSL1401线性CCD TM32F103开发平台移植源代码

    Technorati Tags: stm32 模块资料 对于线性CCD而言,开发着更多的是基于飞思卡尔系列单片机进行开发,前几天在做项目的时候需要用到该传感器,故使用了蓝宙CCD的驱动历程,然后对蓝宙 ...

  8. call(),apply()方法解析(一)

    1.call()和apply()的作用是改变this指向,区别是传参列表不同(前者连续参数,后者为参数数组) 2.方法定义: function.apply(thisObj[, argArray]) f ...

  9. Servlet、Filter

    加载顺序是:context-param -> listener -> filter -> servlet ,而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺 ...

  10. HTML5 CSS3 诱人的实例 : 网页加载进度条的实现,下载进度条等

    今天给大家带来一个比较炫的进度条,进度条在一耗时操作上给用户一个比较好的体验,不会让用户觉得在盲目等待,对于没有进度条的长时间等待,用户会任务死机了,毫不犹豫的关掉应用:一般用于下载任务,删除大量任务 ...