Shell
shell概述
shell是一个命令行的解释器,它接收应用程序/用户命令,然后调用操作系统内核。shell连接Linux内核和外层应用程序。shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。
shell脚本入门
脚本以#!/bin/bash开头(指定解析器)
脚本的常用执行方式:
第一种:采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
sh+脚本相对路径
sh+脚本绝对路径
bash+脚本相对路径
bash+脚本绝对路径
第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)(而且必须要有路径,不然就会被当成命令去执行)
第三种(了解):在脚本的路径前加上“.”或者source
以上三种方式,前两种的启动是创建子shell进行解析执行,而第三种则不是,不会有嵌套shell。开子shell和不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,父shell是不可见的。
变量
系统预定义变量
$HOME、$PWD、$SHELL、$USER等
自定义变量
1.定义变量:变量名=变量值,注意,=前后不能有空格
2.撤销变量:unset 变量名
3.声明静态变量(常量):readonly变量,注意:不能unset
定义规则:
1.变量名可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
2.等号两侧不能有空格
3.在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
4.变量的值如果有空格,需要使用双引号或单引号括起来。
要想将局部变量升级成全局变量,可以通过export 【变量名】将此变量升级成全局变量,注意,当从子变量升级成全局变量时,当你对变量进行更改,在父类是查看不到的,而从父变量升级到全局变量时,对变量的更改能在子变量查看到。
特殊变量
$n
$n:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
$#
$#:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性
$*、$@
$*:这个变量代表命令行中的所有参数,$*把所有的参数看成一个整体。
$@:这个变量也代表命令行的所有参数,不过$@把每个参数区分对待。
$?
$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体哪个数字,由命令自己来决定),则证明上一个命令执行不正确了。
运算符
$((运算式)) 或 $[运算式]
expr 1 + 2
条件判断
1.test condition
2. [ condition ] (注意condition前后要有空格)
注意:条件非空即为true,[ atguigu ]返回true,[ ]返回false。
常用判断条件:
1.两个整数间的比较:
-eq:等于(equal)
-ne:不等于(not equal)
-lt:小于(less than)
-le:小于等于(less equal)
-gt:大于(greater than)
-ge:大于等于(greater equal)
注:如果只是字符串之间的比较,用等号判断相等;用!=判断不等。等号两边要有空格,否则系统将认为等号连同两边是一个整体,而会执行通过。
2.按照文件权限进行判断
-r:有读的权限
-w:有写的权限
-x:有执行的权限(execute)
3.按照文件类型进行判断
-e:文件存在(existence)
-f:文件存在并且是一个常规的文件(file)
-d:文件存在并且是一个目录(directory)
注意,多条件判断(&&表示前一条命令执行成功时,才执行后一条命令,||表示上一条命令执行失败后,才执行下一条命令)