Shell脚本基础

本文介绍了Shell脚本的基础知识,包括如何创建和运行脚本,变量的使用(如只读变量、删除变量和变量类型),字符串和数组的操作,以及常用的命令如echo、printf和test。此外,还讲解了流程控制(如if-else、for循环、while循环和until循环)和函数参数。这是一篇适合初学者的Shell脚本教程。
摘要由CSDN通过智能技术生成

目录

一、创建shell脚本

运行 Shell 脚本有两种方法:

3、只读变量

4、删除变量

5、变量类型

三、Shell 字符串

1、单引号

2、双引号

3、拼接字符串

4、获取字符串长度

5、提取子字符串

6、查找子字符串

四、Shell 数组

1、定义数组

2、读取数组

3、获取数组的长度

多行注释

1、算术运算符

2、关系运算符

3、布尔运算符

4、逻辑运算符

5、字符串运算符

6、文件测试运算符

八、Shell echo命令

1.显示普通字符串:

2.显示转义字符

3.显示变量

4.显示换行

5.显示不换行

6.显示结果定向至文件

7.原样输出字符串,不进行转义或取变量(用单引号)

8.显示命令执行结果

九、Shell printf 命令

1、printf 命令的语法:

2、printf的转义序列

十、Shell test 命令

1、数值测试

2、字符串测试

3、文件测试

十一、Shell 流程控制

1、if else

2、for 循环

3、while 语句

4、until 循环

6、跳出循环

函数参数


一、创建shell脚本

shell在线编辑器:Bash 在线工具 | 菜鸟工具   可以在这个网站练习

打开文本编辑器(可以使用 vi/vim/touch 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell)输入一些代码,第一行一般是这样:

#!/bin/bash
echo "Hello World !"

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

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

运行 Shell 脚本有两种方法:

1、作为可执行程序

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

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

./test.sh  #执行脚本

注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去PATH的环境变量里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。如果不在当前目录则要写成 /文件路径/test.sh。

2、作为解释器参数

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

/bin/bash test.sh

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

  • Shell 变量

1、定义变量  变量名=”变量值

注意,变量名和等号之间不能有空格。同时,变量名的命名须遵循如下规则:

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

中间不能有空格,可以使用下划线(_)。

不能使用点符号。

不能使用bash里的关键字(可用help命令查看保留关键字)。

除了显式地直接赋值,还可以用语句给变量赋值,如:

for file in `ls /etc` 

或

for file in $(ls /etc)
  1. 使用变量

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

your_name="link"

echo $your_name

echo ${your_name}

变量名外面的括号是可选的,加不加都行,加括号是为了帮助解释器识别变量的边界因为我们可以在字符串中拼接变量,如:

your_name="link"

echo "my name is $your_nameyohuohuo"

echo "my name is ${your_name}yohuohuo!"

如果不给变量加括号,解释器就会把$your_nameyohuohuo当成一个变量而我们并没有定义这样的变量。所以尽量给变量都加上大括号。

已定义的变量,可以被重新定义,如下,相同的变量名再次赋值即可

your_name="link"

echo $your_name

your_name="alibaba"

echo $your_name

3、只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变重新赋值或删除

下面的例子尝试更改只读变量,结果报错:

#!/bin/bash

myUrl="https://www.google.com"

readonly myUrl

4、删除变量

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

语法:

#!/bin/sh

myUrl="https://www.runoob.com"

unset myUrl

echo $myUrl

5、变量类型

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

1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

三、Shell 字符串

字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。

1、单引号

str='this is a string'

单引号字符串的限制:

1)单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

2)单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

2、双引号

your_name='link'

str="Hello, I know you are \"$your_name\"! \n"

echo -e $str

输出结果为:

Hello, I know you are "link"! 

双引号的优点:

1)双引号里可以有变量

2)双引号里可以出现转义字符

3、拼接字符串

your_name="link"

# 使用双引号拼接

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, link ! hello, link !

hello, link ! hello, ${your_name} !

4、获取字符串长度

string="abcd"

echo ${#string} #输出 4

5、提取子字符串

以下实例从字符串第 2 个字符开始截取 4 个字符:

string="abcdefg"

echo ${string:1:4} # 输出 bcde

注意:第一个字符的索引值为 0

6、查找子字符串

查找字符 e 或 g 的位置(哪个字母先出现就计算哪个):

string="abcdefg gfedcba"

echo `expr index "$string" eg`  # 输出 5

注意: 以上脚本中 ` 是ESC键下方的反引号,而不是单引号 ',不要看错了哦。

四、Shell 数组

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

多维数组:数组名=[ a b c ][ d e f ][ 1 2 3 ]....

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

1、定义数组

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

数组名=(值1 2 ... n)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值