shell学习

Shebang

指定脚本文件的解释器,相当于!#,一般脚本文件的开头是!#/bin/bash

  • !#/bin/bash开头的脚本,程序在执行时会调用bin/bash,就是bash解释器
  • 如果未指定shebang,默认用当前shell去执行脚本,即$SHELL

shell变量

  • 定义变量时,不能加$.
  • 变量名和等号之间不能有空格!!
  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头.
  • 中间不能有空格,可以使用下划线 '_'.
  • 也可以用命令语句给变量赋值,如:
    1
    2
    3
    4
    5
    for file in `ls /etc` # 返回反引号内的命令结果

    # 将 /etc 下目录的文件名循环出来

    for file in $(ls /etc) # 返回$()括号内的命令结果

使用变量

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

1
2
3
your_name="wgj"
echo $your_name
echo ${your_name}

只读变量

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

删除变量

使用unset删除变量:unset 变量名

变量类型

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

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

shell字符串

可以用单引号,双引号,也可以不用引号。

单引号

单引号字符串的限制:

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

双引号

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
1
2
3
4
5
6
7
8
9
10
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1

# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

输出:

1
2
hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !

获取字符串长度

变量为字符串时,`$

-------------本文结束感谢阅读-------------