shell脚本学习笔记

shell 脚本是一种可以在linux系统下运行的解释性脚本,应用广泛,功能强大,以下是本人在学习shell脚本过程中的学习笔记.

shell 脚本一般第一行为#!/bin/bash#!/bin/sh,这是用来指定运行的解释器程序的路径

第一个脚本

#!/bin/bash
echo "hello shell"
  • 脚本名称为test.sh,其运行方式有两种,一种是赋予可执行权限后使用./test.sh运行,另一种是手动指定运行的解释器来运行,例如/bin/bash test.sh

脚本语法

变量

  • 定义变量时,变量名不加美元符号,同时变量名和等号之间不能有空格
    例: name="panso"

  • 使用变量时,需要在变量前面加上{name}`

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

myUrl="http://www.google.com"
readonly myUrl
  • 删除变量, 删除后的变量不可再读
    例: unset name

Shell 字符串

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

  • 单引号, 单引号用于原样输出字符串内容,内部变量将不会生效, 内部也不可出现单引号,即使转义的也不行
    例: str='this is a string'

  • 双引号,内部可以有变量和转义符号
    例:str="my name is ${name}"

  • 拼接字符串

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

输出:

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

获取字符串长度

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

提取子字符串

  • 以下实例从字符串第 2 个字符开始截取 4 个字符:
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

查找子字符串

  • 查找字符 i 或 o 的位置,用到了expr命令(哪个字母先出现就计算哪个)
string="runoob is a great site"
echo `expr index "$string" io`  # 输出 4

shell 数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。数组元素下标从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 接收传递的参数

  • 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
# 脚本内部代码
echo "name is $0"

# 带参数运行脚本
./test.sh panso

# 输出
name is panso
  • 另外,还有几个特殊字符用来处理参数:
参数处理 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。如"1 n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与@"用「"」括起来的情况、以"2" … "$n" 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

你可能感兴趣的:(shell脚本学习笔记)