[Linux]-shell

目录

【shell的概述】

1.什么是shell

2.系统默认调用的脚本文件

3.shell脚本的创建及规范

 shell脚本的定义步骤

【shell的变量】

1.变量的定义

2.获取键盘输入

 3.只读变量

 4.脚本变量导出为环境变量

 5.脚本变量的注意事项

5.1.命名规则

5.2." " 以及 ' '的区别

5.3.环境变量的修改

 【shell的预设变量】

$?预设变量

【shell脚本的特殊用法】

1.反引号的作用

2.shell中的转义字符

3.shell中的(){}

【条件测试】

1.条件测试的概述

2.文件测试

3.字符串测试

4.数值测试

5.复合测试


【shell的概述】

1.什么是shell

shell的本质其实就是脚本文件,主要用来做批量处理

从两个角度来看,shell即是编程语言,又是软件。

以软件的角度来看:shell命令解析器(sh ash bash解析器等)主要用来解析shell脚本文件

以语言的角度来说:shell是脚本语言。但是shell和Linux的命令还是有区别的。

2.系统默认调用的脚本文件

/etc/profile        对系统中所有的用户生效

~/.bashrc          对登录的用户有效

 两者之间还是有区别的:第一个脚本文件的修改会对所有用户产生影响,而第二个脚本文件仅仅会影响当前用户。其中“/”表示根目录下,“~”表示家目录,较好理解。

fc147764a4df4b56a0abdaaeee843509.png

3.shell脚本的创建及规范

在Linux命令行的格式下,使用如下方法创建shell脚本

vim 00shell.sh

脚本的第一行通常是用来指定解析器的,可以选择sh,ash或者bash解析器

#! /bin/bash        #选择根目录下的bash解析器

有时候,生成的shell脚本会出现如下情况,在输入命令ls -lh 查看当前目录下文件以及权限的时候,会发现当前的shell脚本没有x权限,也就是没有执行权限。

图中三类用户权限分别为:文件拥有者权限、用户组权限、其他用户权限。

3119d96765a54bfcae94eaccd16dff80.png

如何解决shell脚本文件确实可执行权限的问题。执行如下命令

通俗的来讲,就是直接为脚本文件直接添加执行权限。

chmod +x 00_shell.sh

修改后,三类用户权限均有可执行权。

3c1a3061676d486d924fe48ed96f14ec.png

 shell脚本的定义步骤

1.在脚本第一行指明使用的解析器

2.编写脚本

3.添加可执行权限(如果缺失的话)

chmod +x 脚本名

4.执行脚本文件

脚本文件有三种执行方法

./00shell.sh            #检测脚本第一行,使用第一行规定的解析器

. 00shell.sh            #使用当前解析器解析

bash 00shell.sh     #使用命令指定的解析器解析   

【shell的变量】

1.变量的定义

不同于一般的编程语言,shell的变量定义是不需要指明类型的。

变量定义如下

几个注意点

                  定义变量的时候,后面不要加分号

                  !!定义变量的时候,不能这样定义        num = 10      等于号两边不能有空格,否则是错误的

num=10

 如果想要访问变量,记得给变量美刀($)

 #定义变量
 num=10
 #取变量的值
 echo $num
 #对变量写操作
 num=1000
 echo $num

变量的清除

如果想要清除一个变量,那么使用如下命令

unset num

        使用unset清除变量,如果清除到环境变量会很危险

2.获取键盘输入

shell获取键盘输入使用 read ,并且不在需要定义变量。

#! /bin/bash

echo "请输入值"
read num
echo "num = $num"

echo "请输入两个值"
read num1 num2
echo "num1 = $num1 num2 = $num2"

似乎对值的输入无法识别空格,当输入两个数字的时候,第一个可以成功识别,但是会把后面的均作为第二个的值。

8b059acbd71247efba5428fa15e3c15f.png

 3.只读变量

类似于C语言中使用const修饰的变量,只有在定义的时候赋值,后面不可以在对他进行修改。

定义变量的时候,使用readonly修饰,变量为只读变量

readonly num=100

44a18b1b1e184f63863bcae7863f35bc.png

 4.脚本变量导出为环境变量

环境变量相当于系统默认定义的变量?比如说home,就默认为家路径这样。

env命令查看当前系统环境变量

f03ded13a6e2420dbc64f52c5c6edf46.png

如何将自定义变量导出为环境变量

使用export修饰,可以导出自定义变量为环境变量

export num=100        #把自己的变量导出为环境变量

想要成功导出,那么运行的时候就不能再使用那三种方法运行,而是需要使用如下命令

source执行脚本,似乎是在当前shell进程中逐行执行脚本,并且可增加变量的有效期

source 00_shell.sh

 5.脚本变量的注意事项

5.1.命名规则

注意=的两边不能有空格,以及每一句命令后面不能有分号

5.2." " 以及 ' '的区别

" " 包含起来会解析变量的值,前提是加$

‘ ’单纯是字符串,不会有任何解析

 fa9f334d2f454b2dacf5c24f1817feeb.png

5.3.环境变量的修改

假如有一个环境变量为NUM,值为10。如果直接命令修改NUM=20,那么会直接覆盖之前的值。假如需要追加环境变量中,某个路径的值,那么可能不小心会直接覆盖之前的路径,十分危险。

正确追加修改环境变量的方法

export NUM=$NUM:20

#意思是把原本的NUM的值加上新的值赋值给NUM

b68e57363ce1407780fbe14a5af91bfa.png

 【shell的预设变量】

84d3222dff4e42dbb384e5f8d2dd68ad.png

关于这个预设变量,个人理解为,系统中关于这个脚本的一些参数,为了方便使用以及查看,使用一些特殊符号作为这些内容的变量?。然后需要使用的时候在解析(加$)

 $#为传给shell脚本的参数的数量,$*为传入参数内容,而$加上数字分别为传入参数内容。

#!/bin/bash

echo "传入的数量为:$#"
echo "传入的内容为:$*"
echo "参数1为:$1"
echo "参数1为:$2"

ceefb0fd214947aaa5bb08ac2880dcb2.png

$?预设变量

$?预设变量可以返回上一条语句执行的结果。成功返回0,失败为1

【shell脚本的特殊用法】

4d1a6f4516ce42edbdf40aefb35b708c.png

1.反引号的作用

反引号在exc键下方

反引号可以在shell脚本中解析Linux命令。

输出今天是星期几

把前面today is 和date系统命令解析一起显示出来

echo "todat is `date`"

6380529a02364e86923938a6395f4cc4.png

2.shell中的转义字符

shell中的转义字符和C语言相同,唯一不用的是,shell中使用转义字符需要添加 -e 

echo -e "##\n##"

54cd6aef5db1492eb2bdedc4876692b3.png

3.shell中的(){}

()会重新开一个子shell执行,可以理解为,()中的子shell是独立于当前的shell的。

{}则是对{}内的命令在当前shell里面执行

【条件测试】

1.条件测试的概述

条件测试在shell中的应用还是比较重要的。条件测试有很多种,文件测试、字符串测试、数值测试、复合测试等

条件测试的关键字test

test具有以下的语法规则

1.

test  命令        

2.

[ 命令 ]        #命令的左右均有空格

2.文件测试

文件测试经常用来判断当前路径或者目录下的的文件。通过附加的选项可以判断多种情况。

具体的附加选项如下图

82a938b1a8324f749fb026c8357da269.png

文件测试的基本语法规则

#判断当前路径下是否存在test.txt这个文件

test  -e test.txt 

#使用预设变量读取上一条语句的返回值,0表示存在1反之

echo “$?”

3.字符串测试

shell中,字符串测试在本人看来与C语言的字符串比较操作等很类似。无非就是比较两个字符串是否相等或者字符串是否为空。

字符串测试的基本语法规则

#定义一个字符串

str=""

#进行字符串判断

test -z $str 

#取上一条语句结果

echo "$?"

字符串操作扩展

eae31bd185a745ffae5a2408c8a76fc5.png

4.数值测试

数值测试主要用来判断两个数值是否相等,分别可以使用两个测试方法的数值测试

test 命令

test num1 附加选项 num2

#通过附加选项来判断两个数字

[]命令

[ num1 附加选项 num2 ]

附加选项有以下几种:

d743645f65534983b42e56983faa31da.png

5.复合测试

复合测试相当于逻辑与或者逻辑或,同时也具有短路特性。

&&只有当左边的命令执行成功才会执行右边的,否则就算执行右边的也无意义。

||只有左边没有成功才执行右边,否则无需执行右边的。

51229273eaec44aaad8e2d63cd49aef7.png

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leviiil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值