打算花1个小时学习下shell脚本,希望学的完,边学边记录。 开始!!

1. sehll 大概介绍

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

1.1 shell 环境

1.2 运行Shell的方法

1、作为可执行程序

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

./test.sh #执行脚本

2、作为解释器参数

/bin/sh test.sh

/bin/php test.php

2. Shell变量

2.1 shell变量

使用变量:

your_name="qinjx"

echo $your_name # 一般不用

echo ${your_name}

只读变量:

#!/bin/bash

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

readonly myUrl

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

删除变量

#!/bin/sh

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

unset myUrl

echo $myUrl

变量类型

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

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

2.2 shell字符串

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

拼接字符串

使用双引号拼接

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} !

获取字符串长度

提取子字符串

第一个索引为0

查找子字符串

2.3 shell数组

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

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

定义数组

读取数组

获取数组的长度

2.4 shell注释

单行注释

以 # 开头的行就是注释,会被解释器忽略。

每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。

多行注释

:<

注释内容...

注释内容...

注释内容...

EOF

:<<'

注释内容...

注释内容...

注释内容...

'

3. shell传递参数

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

4. Shell数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。

与大部分编程语言类似,数组元素的下标由 0 开始。

Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下: array_name=(value1 value2 … valuen)

读取数组

关联数组

declare -A array_name

获取数组中的所有元素

使用 @ 或 * 可以获取数组中的所有元素 使用场景: 获取所有元素 + 获取关联数组所有元素值 + 获取关联数组所有键 一:普通数组

二:关联数组

获取数组的长度

5. Shell运算符

Shell 和其他编程语言一样,支持多种运算符,包括:

算数运算符关系运算符布尔运算符字符串运算符文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

算数运算符

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。 下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

布尔运算符

逻辑运算符

字符串运算符

文件测试运算符

6. Shell echo命令

echo string 可以使用echo实现更复杂的输出格式控制。

显示普通字符串

echo “It is a test” 这里的双引号完全可以省略,以下命令与上面实例效果一致:

echo It is a test

显示转义字符

echo ““It is a test”” 结果将是:

“It is a test” 同样,双引号也可以省略

显示变量

read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量

显示换行

显示不换行

显示结果定向至文件

echo “It is a test” > myfile

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

echo ‘$name"’ 输出结果: $name"

显示命令执行结果

7. Shell printf 命令

一章节我们学习了 Shell 的 echo 命令,本章节我们来学习 Shell 的另一个输出命令 printf。

printf 命令模仿 C 程序库(library)里的 printf() 程序。

printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。

printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。

%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。

%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中 .2 指保留2位小数。

转义序列

8. Shell test 命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

8.1 数值测试

8.2 字符测试

9. Shell流程控制

if语句相关:

for 循环

当变量值在列表里,for 循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的 shell 命令和语句。in 列表可以包含替换、字符串和文件名。

in列表是可选的,如果不用它,for循环使用命令行的位置参数。

while语句

无限循环

until循环

case … esac

case … esac 为多选择语句,与其他语言中的 switch … case 语句类似,是一种多分支选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。

可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

case … esac 语法格式如下: Shell输入输出重定向

跳出循环

10. 函数

函数实例

格式:

[ function ] funname [()]

{

action;

[return int;]

}

1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

函数参数

11. Shell输入\输出重定向

大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。

输出重定向

输入重定向

和输出重定向一样,Unix 命令也可以从文件获取输入,语法为:

command1 < file1 这样,本来需要从键盘获取输入的命令会转移到文件读取内容。

注意:输出重定向是大于号(>),输入重定向是小于号(<)。

重定向讲解

/dev/null文件

11. Shell文件包含

Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。

. filename # 注意点号(.)和文件名中间有一空格

source filename

好吧, 本来说看一个小时结束的,实操了一些标本,不知不觉超出了半个小时,以此文记录今天 下午3:00-4:30. 好了,准备刷LeetCode了。

本文主要来自菜鸟教程的Shell,链接如下:shell教程 主要是做个目录,方便之后查!

相关文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。