Bootstrap

linux脚本打开文件任意行,shell脚本语言(超全超详细)

shell脚本语言

1、shell的概述

2、脚本的调用形式

打开终端时系统自动调用:/etc/profile 或 ~/.bashrc

3、shell语法初识

3.1、定义以开头:#!/bin/bash

3.2、单个"#"号代表注释当前行

第一步:编写脚本文件

第二步:加上可执行权限

第三步:运行

三种执行方式 (./xxx.sh bash xxx.sh . xxx.sh)

./xxx.sh :先按照 文件中#!指定的解析器解析

bash xxx.sh:指明先用bash解析器解析

. xxx.sh 直接使用默认解析器解析

注意:windows下 写脚本 在linux下执行 注意

4、变量

案例:

案例:读取多个值

案例只读变量:

查看环境变量:env

导出环境变量 作用:(让其他shell脚本识别该变量,设为全局变量)

注意事项:

5、预设变量

shell直接提供无需定义的变量

案例:

脚本标量的特殊用法

6、变量的扩展

6.1、判断变量是否存在

6.2、字符串的操作

7、条件测试

7.1、文件测试

7.2、字符串测试

7.3、数值测试

7.4、符合语句测试

8、控制语句

8.1、if控制语句

案例:

案例:判断当前路径下有没有文件夹 有就进入创建文件 没有 就创建文件夹 再进入创建文件

案例:

8.2、case

8.3、for循环语句

案例:

案例:扫描当前文件

8.4、while

8.5、until

8.6、break continue

9、函数

案例:求最值

案例:函数分文件

1、shell的概述

b3b51c976d6e218d9719d937904a77be.png

shell 是一种脚本语言

脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)

shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)

shell命令解析器:

系统提供 shell命令解析器: sh ash bash

查看自己linux系统的默认解析:echo $SHELL

51fa4d25d7e5bc8db28046c780672587.png

45e1912edbd4dc9dae8295db961c52ba.png

13f27a5a9f6591eee14b97ed35bd35f3.png

shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行

2、脚本的调用形式

打开终端时系统自动调用:/etc/profile 或 ~/.bashrc

/etc/profile

此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,系统的公共环境变量在这里设置

开始自启动的程序,一般也在这里设置

~/.bashrc

用户自己的家目录中的.bashrc

登录时会自动调用,打开任意终端时也会自动调用

这个文件一般设置与个人用户有关的环境变量,如交叉编译器的路径等等

用户手动调用:用户实现的脚本

f9e8b0b5f8ab117aceab1b17f60e1954.png

3、shell语法初识

3.1、定义以开头:#!/bin/bash

#!用来声明脚本由什么shell解释,否则使用默认shell

6a14fe5fb01c8aad8f44b972a2d29eb7.png

3.2、单个"#"号代表注释当前行

第一步:编写脚本文件

60734da98903172f311df1da6dde536f.png

第二步:加上可执行权限

chmod +x xxxx.sh

34eeb3a498979efa150a847dd5b4db27.png

第三步:运行

8d555a0641af60ce0af06d9bde25d370.png

三种执行方式 (./xxx.sh bash xxx.sh . xxx.sh)

三种执行方式的不同点(./xxx.sh bash xxx.sh . xxx.sh)

./xxx.sh :先按照 文件中#!指定的解析器解析

如果#!指定指定的解析器不存在 才会使用系统默认的解析器

bash xxx.sh:指明先用bash解析器解析

如果bash不存在 才会使用默认解析器

. xxx.sh 直接使用默认解析器解析

三种执行情况:(重要)

fcc64d030b24adea276fb79ba2560b07.png

注意:windows下 写脚本 在linux下执行 注意

3c5d48cf7e359b80c181ac5c15439a78.png

执行结果:

ca241c24b9f5dd87bdf03af1e36d0825.png

将windows文件 转换成 unix文件

方法一:dos2unix 如果没有该插件 需要安装

sudo apt-get install dos2unix

dos2unix shell脚本

转换成功就可以执行运行

方法二:

需要用vi打开脚本,在最后一行模式下执行

:set ff=unix

1a1b2ce6a3a9d75b65f1c637e9cb0066.png

4、变量

定义变量

变量名=变量值

如:num=10

引用变量

$变量名

unset :清除变量值

a378b406ab1b82901e77b3a0f041711e.png

运行结果:

7d719bb7c03d0b2ddf6c938fdaa1a170.png

从键盘获取值read

0b77f2a45c8d8edcb3cb2cc9ab6cf80a.png

运行结果:

609742ff7a78aa3bfd3d30008153447f.png

案例:

在一行上显示和添加提示 需要加上-p

9c9847ad7fec70810bb0ec98e8b4638f.png

运行结果:

4ec7487e2418a974a14cd7b288fe26c8.png

案例:读取多个值

633e831155782f1df69a3317affe800c.png

运行结果:

89925b7d4d23f68ae891f3cd209279b3.png

案例只读变量:

3d3bdef1b788d6e7c014e1b8c3659118.png

运行结果:

af534ee4f7890f9a2da0e3b8db2239ad.png

查看环境变量:env

d03d1dcb54a947c267eda21db35f9004.png

f0e860707b6f34062a3c2f488d9567dd.png

导出环境变量 作用:(让其他shell脚本识别该变量,设为全局变量)

source 脚本文件

source命令用法:

source FileName

作用:在当前bash环境下读取并执行FileName中的命令。

注:该命令通常用命令“.”来替代。

如:source .bash_rc 与 . .bash_rc 是等效的。

注意:source命令与shell scripts的区别是,

source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。

06_sh.sh

#!/bin/bash

expor DATA=250

用source 是文件生效

8567494fb8803740c8c57e3a4f56e7c3.png

使用 env可以查看到环境变量中已经有 DATA

ddca801d491a4c9240386dfbdf5f5863.png

可以在终端直接中读取:

a051f1cce0f151559b90bbc59f69f520.png

在其他sh脚本读取:

b317ba22f2d82b724dd0a93bc4ba69d4.png

运行结果:

f47d90fcfcc93d65f5e8cd8a64b361db.png

注意事项:

1、变量名只能包含英文字母下划线,不能以数字开头

1_num=10 错误

num_1=20 正确

2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来

3、双引号 单引号的区别

双引号:可以解析变量的值

单引号:不能解析变量的值

69e7ebeaf20cbdef4efa4295b105c5fd.png

运行结果:

24f3876f386c8632cec355a07dc66e65.png

如果想在PATH变量中 追加一个路径写法如下:(重要!!!!)

export PATH=$PATH:/需要添加的路径

5、预设变量

shell直接提供无需定义的变量

f98cce88ab6c25e293d179787606c414.png

案例:

c0745b3c6d35d708e865dd218875a07f.png

运行结果:

6b56ae6f606fd91e3ac59195f10a1ab7.png

脚本标量的特殊用法

ce6ae04fdec666c13ad70f22a6314179.png

bf1a7feef5b970a6d6dcf470c89fc84e.png

9d8fe019f641a94351a483cfce115839.png

加-e转义 才起换行作用

0a616b6dd1942edf0be6c7a2fb45e8b6.png

()由子shell 完成

b53726d2623ab1634434ca326909c69c.png

{}由当前的shell执行

0c5356da05a29e94677becf12fa14ece.png

6、变量的扩展

6.1、判断变量是否存在

0959cd6583ff4cbe725c56773c2fa5e3.png

e0df5fe9cf5d75ff3353fbb2a413811b.png

6.2、字符串的操作

57d783aa2917618c85566dcce7b6bb7c.png

7、条件测试

test命令:用于测试字符串、文件状态和数字

test命令有两种格式:

test condition 或[ condition ]

使用方括号时,要注意在条件两边加上空格。

7.1、文件测试

4764bf19fa130baa3bb868f703d56064.png

e376a89b90b8c487dd6138966ec86851.png

7.2、字符串测试

e6db46c0b6ecd2c19f17ce2f5f9205c7.png

1344763c48a79297c86b844224ce788f.png

be353e579af060eb5d1c605a5ddbe430.png

7.3、数值测试

64310904e5fa71c3845da64efdf20fe5.png

6859c722000d83480b7a9021b744ed7b.png

d33a2e68651ae77670317b39e9370db1.png

7.4、符合语句测试

21868abc72b840a0887ce6d4ad057033.png

95a46032746bb799897c305723e8fc3e.png

8、控制语句

14dc8e45b9984e86756863829938cfc7.png

8.1、if控制语句

格式一:

if [条件1]; then

执行第一段程序

else

执行第二段程序

fi

格式二:

if [条件1]; then

执行第一段程序

elif [条件2];then

执行第二段程序

else

执行第三段程序

fi

案例:

a0b592a4a47eb6de23b46c4a0a737d5a.png

案例:判断当前路径下有没有文件夹 有就进入创建文件 没有 就创建文件夹 再进入创建文件

22fee18503ab0b0202c92ece5a5431c3.png

运行结果:

4adcb66a8e55993588675b19231c89b4.png

案例:

0fbc1eafee3bc90d970ebdee5b0faa60.png

运行结果:

2b7e2a7ed56af70106470711edaba6d4.png

8.2、case

35a1f0a05582a657853e6287276eca34.png

bf739d408fc28ae490b2c9d152bcf6f5.png

8.3、for循环语句

3b2dec285c0b2d2dce25aef86b57b1fb.png

6a03cf3038401268ebddea98378fb7f1.png

ce15a438d94dc11a847c3a9ce27e86dc.png

案例:

fb79d6127618d12219bb7e8650bc8eff.png

案例:扫描当前文件

3c3f636e92a3d9b611aa5f6d7ab4d5cb.png

8.4、while

247a0b337ef88224ea92d517588c7d95.png

a871d938e0e7490a95b341338b9c31f9.png

8.5、until

f25882b8f73cc691eaa2ef68f9fd1f98.png

63946932867f76fed0a6f852543ae2d2.png

8.6、break continue

6efeda377430b71e1ac2c6a60a586ca5.png

9、函数

0e1d7f6ede8317df9bc7d497e7c080b6.png

所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用

6f05e1516b77ff0f748e7535fadc9a46.png

案例:求最值

9410c35bd43a07482d7c78014f2101ed.png

案例:函数分文件

fa555493c670b81c0adbdac3277d0048.png

fun.sh

92bc57e92a8dd4a4d9747ea050b999ed.png

24_sh.sh

90a77648ab57910a5f24e98deb76145d.png

;