shell脚本学习笔记

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

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

第一个脚本

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

脚本语法

变量

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

  • 使用变量时,需要在变量前面加上符号,并且使用花括号{}来包裹住变量名 例: `echo{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 2 …n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ *相同,但是使用时加引号,并在引号中返回每个参数。如"@"用「"」括起来的情况、以"1" "2" … "$n" 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,942评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,120评论 0 10
  • Linux的shell脚本是linux的入门基础课程,难度系数也不大,这里做一个学习笔记 ◆1.1 语法基本介绍 ...
    水车阅读 1,943评论 0 5
  • -- 1 --Shell文件的扩展名并影响脚本的运行,一般用“.sh”是方便一眼认出是Shell文件。学习某种语言...
    筱南独舞阅读 1,573评论 0 1
  • 菜鸟教程shell在线编辑器大目录整理: 1.第一个 Shell 脚本尝试 2.Shell 变量 3.Shell ...
    中酷男阅读 11,122评论 0 12