Shell编程学习笔记

解释器

#!/bin/sh 

或者

#!/bin/bash

写在文件开头表示使用Bash Shell脚本解释器
Bash(Bourne Again Shell)

Shell 变量:

变量名和等号之间不能有空格!!!
使用定义过的变量,只要在变量名前加美元符号即可,即’$’

$var${var}

加花括号是为了帮助解释器识别变量边界
使用readonly命令可以将变量定义为只读变量,
例:

var=0
readonly var

使用unset命令删除变量,变量被删除后不能再次使用
但该命令不能删除只读变量

Shell字符串

单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
单引号字符串中不能出现单独一个单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用

双引号的优点:
双引号里可以有变量
双引号里可以出现转义字符

拼接字符串:

str0="man"
#双引号拼接
str1="hello , "$str0" !"
str2="hello , ${str0} !"
#单引号拼接
str3='hello , '${str0}' !'

获取字符串长度

${#str}

提取字符串

${str:1:4}	#从第2个字节起提取四个字符

读取数组

${数组名[下标]}

下标使用@可以获取数组中的所有元素


Shell 传递参数

在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。
n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推
Tips:其中$0为执行的文件名

还有几个特殊字符用来处理参数:

字符意义
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数
$-显示Shell使用的当前选项,与set命令功能相同
$?显示最后命令退出状态。0表示没有错误,其他任何值表明有错误

Shell数组

Bash Shell只支持一维数组,初始化时不需要定义数组大小。
Shell数组用括号表示,元素之间用空格分开

Array_name=(value1 value2 … valueN)
或者是
Array_name[0]=value0
Array_name[1]=value1
…

Shell基本运算符

原生的Bash不支持简单的数学运算,但可以通过其他命令来实现,例如awk和expr,其中expr最常用。
expr是一款表达式计算工具,使用它完成表达式的求值操作。
例如:

Value=`expr 2 + 2`

注意:
*表达式和运算符之间要有空格
*完整的表达式要被``反引号包含,在Esc键下面。

条件表达式

要放在方括号之间,并且要有空格

[ $a == $b ]
[ $a != $b ]

关系运算符

字符意义
-eq检测两个数是否相等,相等返回true
-ne检测两个数是否不相等,不相等返回true
-gt检测左边的数是否大于右边的,如果是,则返回true
-lt检测左边的数是否小于右边的,如果是,则返回true
-ge检测左边的数是否大于等于右边的,如果是,则返回true
-le检测左边的数是否小于等于右边的,如果是,则返回true

例如:

A=10
B=20
if [ $A -eq $B ]
then
	Echo “ $A -eq $B : A等于B ”
fi

布尔运算符

字符意义
!非运算,表达式为true则返回false,否则返回true
-o或运算,有一个表达式为true则返回true
-a与运算,两个表达式都为true才返回true

逻辑运算符

字符意义
&&逻辑的AND
||逻辑的OR

字符串运算符

字符意义
=检测两个字符串是否相等,相等返回true
!=检测两个字符串是否相等,不相等返回true
-z检测字符串长度是否为0,为0返回true
-n检测字符串长度是否为0,不为0返回true
$检测字符串是否为空,不为空返回true

文件测试运算符

字符意义
-b file检测文件是否为块设备文件,如果是,则返回true
-c file检测文件是否为字符设备文件,如果是,则返回true
-d file检测文件是否为目录,如果是,则返回true
-f file检测文件是否为普通文件,如果是,则返回true
-g file检测文件是否设置了SGID位,如果是,则返回true
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回true
-p file检测文件是否有名管道,如果是,则返回true
-u file检测文件是否有SUID位,如果是,则返回true
-r file检测文件是否可读,如果是,则返回true
-w file检测文件是否可写,如果是,则返回true
-x file检测文件是否可执行,如果是,则返回true
-s file检测文件是否为空,不空返回true
-e file检测文件(包括目录)是否存在,如果是,则返回true

其他检测符:

字符意义
-S判断文件是否socket
-L检测文件是否存在并且是一个符号链接

Shell echo命令

基本输出
echo string

或者是

echo "string"

我个人推荐使用带引号的方式,因为能更清晰地知道打印的是哪部分

变量显示
#!/bash/sh'

read temp
echo "$temp"
开启转义
#!bin/sh

echo -e "OK! \n" # -e 表示开启转义
echo " Test"

#输出结果为
OK! 
Test
显示结果定向到文件
echo "Test" > file
用单引号时,原样输出字符串,不进行转义或取变量
echo '$name\"'

#输出结果为
$name\"
显示执行命令结果
echo `date`		#注意此处用的是反引号!!!不是单引号

#输出结果为
2019年 12月 16日 星期一 16:55:17 CST

还会继续更新,敬请期待。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值