Shell编程基础-01-命令和运算符

Shell是一个环境,提供了对Linux系统的借口;向你接收输入,并根据输入执行程序,并显示程序的输出;可以运行我们的命令,程序和shell脚本

引用一篇关于介绍shell中格式的帖子:Linux shell 中 ( ) ‘ ‘ , () ` `, (){},$[] $(()),[ ] (( )) [[ ]]作用与区别

一、shell脚本创建

shell脚本按照命令列表中列出的顺序执行

1、创建->编辑->保存

vi shell.sh
文件的第一行写#!/bin/bash

2、修改权限

增加x执行权限
chmod u+x shell.sh

3、执行

在当前目录下:./shell.sh #路径+脚本名

二、命令

1、控制台输出:

echo [-n] “...” #加上-n则代表这一行输出不换行(默认不换行)
echo -e “...” #加上-e则代表这一行支持转义,可以使用\t制表符等

#!/bin/bash
echo "hello kb10"
[root@chust01 shell]# ./three.sh 
hello kb10

2、控制台输入

区分变量和命令,变量全部大写,$引用变量,可以直接写在命令里

echo -n "please enter your name =>"
read NAME
echo "your name is $NAME"
[root@chust01 ~]# ./shell/first.sh
please enter your name
aaa
your name is aaa

3、注释

(1) 单行注释在行前加#
(2) 段落注释:行前加:<<! ,行后加!

4、变量

数字、字母、下划线,一般字母大写
值可以是一个数字、文本、文件名、设备或任何其他类型的数据,不可以是指针
shell可以创建,分配和删除变量

(1) 创建

NAME=”henry”
AGE=18

(2) 使用

输出多个变量时需要在最外层加双引号,连同中间的间隔符一起输出

echo$NAME,$AGEecho $NAME

(3) 取消

回收变量unset

unset NAME
echo "your name is $NAME"

在这里插入图片描述

5、常量

readonly#不能再赋值,再赋值会报错

readonly AGE=18
echo "age:18"
AGE=22

在这里插入图片描述

6、变量分类

(1) 局部变量:当前实例有效
(2) 环境变量:跨实例访问
当前登录有效的临时环境变量:临时环境变量

	export -p#列出当前所有的环境变量
	export -n VAR#删除
	export VAR#添加变量到当前连接的环境变量中

还有一种是全局的环境变量,JAVA_HOME
(3)Shell变量
$$ 当前shell进程编号
在这里插入图片描述

$0 当前脚本的名字路径

echo $0

. 在这里插入图片描述

$n 脚本参数,传入的值,输出

echo $1
echo $2

在这里插入图片描述

$# 脚本参数的数量
在这里插入图片描述在这里插入图片描述

$* 脚本参数的完整集合(当成数组的格式存储)
在这里插入图片描述

$@ 脚本参数的独立集合,不加双引号,和$*相同
在这里插入图片描述
在这里插入图片描述

加上””$*代表整体,而$$@代表个体
在这里插入图片描述在这里插入图片描述

$? 上一条命令的执行结果状态值或函数的返回值:0正常,1失败(不常用)
在这里插入图片描述

$!上一条后台命令的进程号The process number of the last background command

7、数组

(1) 标准变量:一个变量存一个值,一个类型一个值
(2) 数组:支持不同类型的变量,可以在同一时间容纳多个值
加双引号:当做整体,一个字符串
不加双引号:空格

在这里插入图片描述
在这里插入图片描述

#创建赋值
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

echo ${NAME[*]}

在数组前加一个#,获取数组的长度
在这里插入图片描述
在这里插入图片描述
NAME=($NAME) #将符合数组特性的字符串转为数组
在这里插入图片描述在这里插入图片描述

三、运算符

1、算数运算符

shell早期未设计算数,但可以使用外部程序awk或expr
expr与运算符和其他值之间【必须有空格】,所有的算术计算,使用长整数
#乘号需要转义 *,乘方是**
#不支持小数计算 + - * 、 % = ++ –

	(1)VAL=`EXPR 2 + 2`
	(2)let “VAL=2**3”
	(3)VAL=$((2+3))

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

条件表达式
在这里插入图片描述在这里插入图片描述

2、关系运算符

-eq -ne -lt -le -gt -ge

3、布尔运算符

 ! -o -a
[ 2 -lt 3 -o 5 -gt 3 ]

|| &&逻辑与非要用两层括号

[[ 2 < 3 || 5 > 3 ]]

用到了双分支:注意if语句里的空格,大于等于的两种写法

在这里插入图片描述在这里插入图片描述.在这里插入图片描述在这里插入图片描述

4、字符串运算符

#二元:== !=
在这里插入图片描述

在控制台输入引用的变量
在这里插入图片描述

5、正则:=~

在这里插入图片描述

[[ $var =~ PATTERN]]

#正则匹配

	^		开始
	$		结束
	.		一个任意字符
	[]		指定范围
	\<		单词开始
	\>		单词结束
	\b		单词开始或结束
	\B		单词非开始和结束
	?		{0,1}
	+		{1,}
	*		(0,)
	{m,n}	最少m,最多n
	{m,}	最少m次
	{,n}	最多n次
	{f}		固定f次
	\		转义符
	()		组合
	|

6、一元:

-z(是否为空) $str(是否不为空)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、文件测试操作(一元左置)

#-e -d -f -r -w -x -s(not empty)
-e file 检测文件(包括目录)是否存在
-d file 检测文件是否是目录
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件)
-r file 检测文件是否可读
-w file 检测文件是否可写
-x file 检测文件是否可执行
-s file 检测文件是否为空(文件大小是否大于0)

-b file 检测文件是否是块设备文件
-c file 检测文件是否是字符设备文件。
-g file 检测文件是否设置了 SGID 位
-k file 检测文件是否设置了粘着位(Sticky Bit)
-p file 检测文件是否是有名管道
-u file 检测文件是否设置了 SUID 位

在这里插入图片描述在这里插入图片描述 在这里插入图片描述在这里插入图片描述在这里插入图片描述

8、特殊表达式

`` <=> $()

命令替换符号,兼容性``更好

OUTPUT=`start-all.sh`

先执行start命令,执行完把结果赋值给OUTPUT,默认有线程等待,延时加载
在这里插入图片描述

(()) #算数加强版
在这里插入图片描述在这里插入图片描述在这里插入图片描述
控制台输入
在这里插入图片描述

$(()) <=> $[] #算数运算, ( ( ) ) 里 的 变 量 可 以 不 加 (())里的变量可以不加 (())符号
[] #test命令
[[]] #字符串计算加强版# 可以用|| &&
${}
${STR#*WORD} #从前往后匹配,删掉第一个WORD匹配到字符以及前面的字符;如果写两个#,则删除全部匹配到的之前的字符。可以用来获取文件名。
在这里插入图片描述在这里插入图片描述

${STR%WORD*} #从后往前匹配,和#号相反。可以用来获取文件路径和根目录。
在这里插入图片描述在这里插入图片描述

${STR/WORD/REPLACE} #替换STR中第一个匹配到WORD的值为REPLACE
${STR//WORD/REPLACE} #替换STR中所有匹配到WORD的值为REPLACE
${STR:-DF_VALUE} #若STR未赋值或为null,设置STR为第二个参数DU_VALUE
${ARRAY[IX]} #获取数组ARRAY下标IX的元素
${#ARRAY[@]} #获取数组ARRAY的长度

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值