shell脚本编程

1 shell简介

1.什么是shell?
Shell在英文单词中的意思是贝壳。在贝壳内部就是操作系统的内核,
贝壳外部就是用户,shell其实就是用户与内核进行交互的一个工具。
2.shell命令
Linux命令其实就是shell命令,shell命令大部分被存放在系统默认
路径 /bin (/usr/bin),使用shell命令的步骤:
1) 打开一个终端Terminal  --> 终端其实就是shell命令的解释器  bash
2) 在终端上输入命令 --> 终端执行完命令之后会刷新一行命令提示行
3) Linux下的所有命令使用解释器bash进行解析  --> bash解释器所在位置

2 shell变量

2.1 shell变量命名规则

与C语言中的变量命令规则类似
Shell变量只能由数字,字母,下划线组成,不能是数字开头

2.2 shell变量的声明

Shell变量的声明是不需要指定类型的,数据的默认类型都是字符串类型
C语言 : int i; char ch; float f;
Shell : str

2.3 shell变量的赋值

Shell变量赋值时,等号两边不能有空格

str=hello   #默认是字符串类型

2.4 shell变量的引用

–> 在变量名前面加上$

str=hello
echo $str    #echo是往终端输出一串数据 

==>hello

echo -->往终端输出一串数据
注意: echo命令是可以在输出的字符串中添加换行符 ‘\n’, 制表符 ‘\t’, 不换行 ‘\c’(echo命令默认在输出后换行),在使用这些符号时,需要在前面指定参数 -e

echo -e "hello world\c"    #默认输出不换行

2.5 shell变量的种类

C语言变量: 局部变量 , 全局变量, 静态变量

Shell下的变量种类型
1) 用户自定义的变量 例如4中的str;
2) 系统环境变量 例如 PATH;

==> 可以在Linux下通过env查看系统环境变量
&修改系统环境变量PATH, 添加一个路径(/home/gec/Public)到PATH中
==> PATH=$PATH:/home/gec/Public   (临时修改)
&如果想要永久修改环境变量 
==> 那就把修改环境变量的命令写入终端启动脚本 (~/.bashrc)的最后一行

注意:如果在(~/.bashrc)启动脚本中误修改了一些命令,可能导致终端命令都用不了的严重后果;
3)命令行变量
$#:外部参数的个数
$ * : 外部参数的所有内容
$n: 数字n代表第几个参数
$?:上一个shell命令执行的返回值,成功返回0,失败返回非0
$$:代表当前的进程ID


3 特殊符号们

3.1 引号

引号有三种,双引号“”、单引号‘’、反引号``

3.1.1 单引号

‘’:如果一个字符串被单引号包含,其内部的任何成分都被视为普通的字符串,包括变量的引用或命令;

3.1.2 双引号

myname=Michael Jack

“”:此变量没有双引号将会报错,中间有空格时,第二个会被认为是命令,但很显然不对;

3.1.3 反引号

val=time
echo "$val:`date`" #会执行date命令

3.2 竖杠 | (管道)

ls -l | wc

注:ls -l负责收集目录文件信息,通过管道输送给wc计算出行数、单词个数和总字符数;

3.3 重定向(>、<、>>)

ls l> a.txt
echo 0<b.txt   #echo会从b.txt中读取数据,而不是从键盘读取,并通过标准输入0
echo "hello" >> b.txt

4 字符串处理

1.计算字符串个数

val=hello
echo "${#val}"

==>5
2.删除字符串左边部分字符(#、##)

str=hello123a20lllllllz20world
level=${str##*[a-z]20}    
echo "level##: $level"

level=${str#*[a-z]20}
echo "level#: $level"

注意:星号*的位置
==>level##:world
==>level#:lllllllz20world

3.删除字符串右边部分字符(%、%%)

str=hello123a20lllllllz20world
level=${str%%[a-z]20*}        
echo "level%: $level"

注意放星号*的位置,要放在最右边,表示右边的任意字符,否则报错!
==>hello123

5 测试语句

1.对文件、数字、字符串进行判断的语句
在这里插入图片描述
注意:以下两种写法是相同的意思

#test1
if test -e file
then
	cat file
fi

#test2
if [ -e file ]
then
	cat file
fi

6 脚本语法单元

6.1 分支控制

1.if-else分支控制
格式:
If 判断条件1
then
Xxx; //执行语句1
elif 判断条件2
then
Xxx; //执行语句2
else
Xxx; //执行语句3
fi //if语句的结束标志
==>特点:
&当且仅当if语句后面的语句执行结果为真(即为0)时,then下面的才会执行;

2.分支语句case
格式:
case value in
A) 语句1 ;; //拿value与A进行比较,如果相等,那就执行语句1
B) 语句2 ;; //拿value与B进行比较,如果相等,那就执行语句2
C) 语句3 ;; //拿value与C进行比较,如果相等,那就执行语句3
*) 语句4 ;; //*是一个通配符,相当于C语言里面的defalut
esac

6.2 循环控制

1.循环语句 for
格式:
for value in arg #依次从arg中获取一个值给 value ,以空格为结束符
do
Xxxx; #执行语句
done;

2.循环语句 while
格式
while 循环条件 #条件为真时一直循环
do
Xxx;
done

3.until 循环
–> 一直循环,直到某种情况的发生
格式
until 判断条件 #==>当判断条件成立的时候,结束循环
do
Xxx;
done

declare -i n=1

until [ $n -ge 101 ]
do
	echo -e "$n \c"
	n=$n+1
done

6.3 函数

1.函数定义
格式: 函数名() //所有的参数默认都是字符串类型,不需要定义参数类型
==> $* : 代表函数执行的所有参数
$# : 函数的参数格式
$n : 代表函数执行的第n个参数
$? : 最近一次函数调用的返回值

2.函数调用
格式: 函数名 参数

fun()
{
	for count in $*;
	do
		echo "$count";
	done;

	echo "arg number: $#";

	return 2
}

fun "hello world nihao shijie" 12 3  #函数调用

echo "fun return is:$?";

6.4 trap

==> 格式 : trap 函数名 信号值
1.当脚本收到信号SIGINT时,忽略该信号

trap "" INT

例如: 设计脚本,每次捕捉到SIGINT信号就输出一个 字符串 hello

#!/bin/bsah
fun()
{
	echo "hello"
}

trap fun INT

while [ 1 ]
do
	sleep 1
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值