Shell 不神秘:拆解 Linux 命令行的逻辑与效率

初始shell

shell的概述

什么是shell

本质

shell本质是脚本文件:完成批处理。

比如 有一个文件 中十个文件,这十个文件中每个文件又有是个子文件,由人来处理,很麻烦,但如果写一个脚本文件,让脚本来替我们完成,这个过程就完成了批处理

sheel 即使**软件也是语言**

软件:shell 命令解析器(sh,ash,bash)

解析器: 对脚本文件逐行翻译成计算器能够识别的语言,并执行文件

查看解析器命令:echo $SHELL

语言:shell脚本语言。必须符合解析器的规则

编译: 生成可执行文件

shell默认调用的两个脚本文件

常用来配置环境

/etc/profile ~/.bashrc

/etc/profile

对系统(ubuntu)的所有用户都有效,用户登录系统的时候执行

~/.bashrc

对登陆的用户有效 用户登录,打开终端的时候

写脚本的步骤:

1、 指明脚本的解析器

#!/bin/dash

2、 写脚本

echo “初识shell”

3、给脚本加权限(没有才加)

chmod +x 脚本文件

单个#表示注释

#!用来声明脚本由什么shell解释 不写的话默认是shell

#!/bin/dash 当前脚本指明由bash 解析器解析

脚本执行方式

bash 直接用bash解析器解析当前文件,无需可执行权限,只要能读就能执行

sh

. (. + 一个空格)用当前解析器(并不是文件中指明的解析器)解析当前文件,无需加可执行权限 可读就可以

当前解析器是 echo $SHELL

./脚本文件 用需要加权限

在windows下 写脚本,Linux运行 可能出现的问题

我实在vscode中操作的Ubuntu虚拟机 的终端

这里可能会有问题,因为 在windows中空格是\r\n 而在linux中是\n 部分同学可能出现以下问题

解决方法

1、dos2unix

(1) 安装dos2unix sudo apt-get install dos2unix

(2) dos2unix 脚本文件

2、用vim打开对应脚本文件,在最后一行 执行

:set ff=unix

shell变量

自定义shell变量

脚本中,不用关心类型!!

num=10

注意 = 前后不要有空格,解析器非常严格,多一个空格少一个空格都会出现问题

shell脚本 就算某一行错误,如果影响不大,不会影响后续代码的执行 会继续执行之后的代码

代码运行结果

注意

1、此时的num=10 这里就是定义了 不再是赋值操作

2、echo类似于 c中的printf 执行遍历操作

echo会自动执行换行操作

常见变量操作

1、清除变量操作 unset

格式

unset 变量名

操作演示

代码运行结果

可见num变量 被清除

2、自定义shell变量 read

格式

read 变量名

注意 此时这个变量不要求read之前必须定义,但最好在read之前定义一下

拓展

我们前面提过echo会执行换行操作,这会使我们的界面变得不那么美观

因此 我向大家引入以下方法

05_shell.sh

#!/bin/sh

export num1=10

echo "$num1"

read -p 就是在输入之前,先遍历后面的字符串(可以是变量),再进行输入操作

代码演示

代码运行结果

如何输入多个值呢

多值输入

请记住这句话:先满足变量赋值,剩下的全部交给最后的变量

代码演示

代码运行结果

大家看一下 运行结果 再看一遍下面这句话

先满足变量赋值,剩下的全部交给最后的变量

先满足num1 再满足num2 再把剩下的全部都给num3

3、只读变量
格式

readonly 变量名

代码演示
#!/bin/bash

readonly num=1

echo "num = $num"

#赋值操作

num=10

echo "num = $num"
代码运行结果

可知,num为只读变量

也可以再次确定,shell中 某行报错不影响后续代码的正常进行

4、脚本的变量**导出为 环境变量**

直接使用系统的环境变量

查看环境变量 *env指令*

步骤

1、export 变量名=值

2、终端运行的时候 source 文件名

清除环境变量

在终端上用unset 变量名 删除环境变量

代码演示
05_shell.sh

#!/bin/sh

export num1=10

echo "$num1"

终端运行的时候,./文件名无法将变量设为环境变量。只有通过

这种方式才可以

06_shell.sh

#!/bin/bash

echo "06_shell.sh中的$num1"
代码运行结果

5、变量注意事项
知识点1 “” 与 ‘’

“” 双引号 表示可以说明里面的内容是一个整体,内部内容会被进一步解析

‘’ 单引号 表示可以说明里面的内容是一个字符串,内部内容不会被进一步解析

并且num=10 20 是错误的,不能这样赋值

应标明是一个整体 num=”10 20”

知识点2 转移字符

如果需要转义字符需要,需要加上 -e

知识点3 命名规则

变量名只能包含数字,英文字母和下划线,不能以数字开头,不能是关键字

知识点4 () {}

() 是只有在括号内有效

{} 是括号内外都有效

知识点5

作用是命令替换,优先执行中的命令,然后把执行的命令结果,替换到源命令中

这一点看一下

用户,成员,访客 默认权限 775文件夹 664文件

知识点6 中文空格与英文空格

有的编译器插件会在你输入空格时自动进行输入法转换,但有的不会。如果你的程序莫名报错,可以看看是不是这个原因

下面我来讲一下原因

我们以echo “你好”

#中文空格时,空格无法起到分割符号的作用,会把 “你好”当作一个整体,因此报错

知识点7 权限

我们看-rwxrwxr-x 这里是权限

第一个rwx是所有(拥有)者权限 此时是 可读可写可执行

第二个rwx是组员权限 此时是 可读可写可执行

第三个r_x是访客权限 此时是 可读不可写可执行

创建文件夹时 默认是775 rwx rwx r_x

创建文件时 默认是664 rw_ rw_ r__

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值