【学习分享】shell脚本基础(全)

Shell

1、基础语法

1.1 变量

1.1.1 规则

与java、python的变量规则一致,大致包含以下规则:

  • 只包含字母、数字和下划线

  • 不能以数字开头

  • 避免使用 Shell 关键字(和其他语言是一样的)

  • 使用大写字母表示常量

  • 避免使用特殊符号和空格

1.1.2 使用

在使用变量前,增加美元符号$

name='zhangsan' 有一个点是需要注意的,python和java当中变量的赋值,等号的左右两边会增加空格去进行区分,但是shell当中不需要,增加了甚至可能报错

echo $name 或者 echo ${name} 本质上两种方式都是一样的,可加可不加,加括号是为了帮助解释器识别变量的边界,但是建议是都加上

1.1.3 只读变量

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

这个概念有点像java当中的私有变量,可用 可读,但是无法改变

name="lisi"
readonly name 

这样name这个变量就只读不可用,若强行改变,会报错

1.1.4 删除变量

使用 unset 命令可以删除变量

#!/bin/sh
name="zhangsan"
unset name
echo name
上述代码无任何输出结果
1.1.5 类型
  • 字符串,使用方式和其他语言一样,也是可拼接的,但是有一个需要注意地方,单引号和双引号的区别

    区别单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;单引号字符串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用

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

    #!/bin/sh
    name=“zhangsan”
    test=“hello,${name}”
    echo test  #输出 hello zhangsan
    test_1='hello,${name}'
    echo test_1  #输出 hello,${name}
    ​
    #获取字符串的长度
    s="test"
    echo $(#s) # 输出4
    ​
    #第二种获取字符串长度的方式
    echo $(#s[0]) # 输出4,本质上当变量为字符串时,${#string} 等价于 ${#string[0]}
    ​
    #查找子字符串
    t="abcdefg"
    echo `expr index "$t" ab` #输出1,输出`ab`这个字符串第一次出现的位置
    ​
    ​

    获取字符串长度

  • 整数变量,和其他语言一样。有个特点是,多了两个关键字“ declare”“typeset ”,这样的声明告诉 Shell 将 my_integer 视为整数,如果尝试将非整数值赋给它,Shell会尝试将其转换为整数

declare -i age=18
  • 数组变量(仅支持一维数组,不支持多维)

aray=(1 2 3 4) #定义数组的形式
#读取数组
s=$(aray[0]) #获取aray数组中的第一个值
​
h=$(aray[@]) # 获取aray数组中的所有值
​
########### 
: '注释'

1.2、参数传递

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为 $nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数。

例如可以使用 $1、$2 等来引用传递给脚本的参数,其中 $1 表示第一个参数,$2 表示第二个参数,依此类推

 #!/bin/bash
 echo “$0” #输出脚本名称 包含路径
 echo "$1" #输出第一个参数 后续的参考上述概念

特殊字符释义:

  • $#:传递到脚本的参数个数(例如:传递的参数为 a b 从,调用该命令,输出3)

  • $*:把所有参数以字符串的形式都传递到脚本

  • $$:脚本运行的当前进程ID号

  • $!:后台运行的最后一个进程的ID号

  • $@:与$*有点相似,在最后具体说明差异

  • $-:显示shell当前选项

  • $?:显示最后命令的退出状态,0表示没有任何错误,其他值是有错误的

你可能感兴趣的:(python,开发语言,bash,物联网)