shell 脚本编程

shell编程(脚本编程)

#!/usr/bin/bash
echo "hello"
exit 0    

在这里插入图片描述

为脚本文件更改权限之后,加上执行权限,就可以当做可执行文件来执行,但是区别于.exe文件
在这里插入图片描述

C/C++ 编译型:xxx.c 编译生成二进制可执行程序,直接运行可执行程序(运行效率高,开发效率低)

shell 解释型:需要解释器,通过解释器解释执行(开发效率高,运行效率低)

当对性能不作要求的时候,我们使用解释型语言会更加高效
写的是一个脚本文件,但是运行的是一个解释器,通过解释器来解释脚本文件;脚本文件是文本文件,可执行程序是脚本解释器,将脚本程序当做参数,传给脚本解释器来进行运行.如果需要知道脚本文件执行时的进程号,实际上就是脚本解释器的进程号。

脚本编程的相关知识点

变量

本地变量

在传统的C/C++等编译型语言当中,我们的变量和值的关系是每一个值和变量(地址空间结合),每一个变量都有一个固定的地址,但是在解释型语言中,当变量被赋予不同的值的时候,他的地址也会随之改变,不可将两种不同类型的语言相提并论(内存分布方面);解释型语言没有类型的区别

#! /usr/bin/bash

str=hello
val=99
mystr=$val#用val给mystr赋值
#井号为注释标准
#echo是输出,相当于printf
#在赋值的时候加不加双引号是都可以的,且等号的两边不能有空格
#如果要原样输出,请使用单引号

#在键盘获取

echo ”input“
read line
echo "line=$line"

echo 'val=$val'
echo “val=$valecho “str=$strexit 0

在这里插入图片描述

环境变量

在当前环境中已经定义好的可以直接使用,例如 PATH

#!/usr/bin/bash

echo "$PATH"#最常见环境变量,可执行程序存放的地点
echo "$PS1"#命令提示符
echo “\$0=$0#脚本的名字
echo "\$#=$#"#传递给脚本的参数个数
echo "\$$=$$"#shell脚本的进程号,脚本程序通常会用他来生成一个唯一的临时文件,如/tmp/tmpfile
echo "\$1=$1"#第一个参数
echo “\$2=$2#第二个参数,$后面跟的几就是第几个参数
参数变量

条件

字符串
#! /usr/bin/bash

echo "input"
read line
#判断字符串相等 等号两边有空格
if [ "$line" = "123" ]
then
	echo "=="
fi

#判断是否为空

if [ -n "$line" ]
then 
	echo "值 $line"
else 
	echo "null"
fi
算数比较
#!/usr/bin/bash
echo "input"
read line

if [ "$line" -lt 100 ]
then
	echo "$line < 100"
fi

if [ "$line" -lt 0] || ["$line" -gt 100 ] 
then
	echo "成绩不合法"
fi
文件测试
#文件检查命令test -f <filename>,检查文件是否存在
if test -f fred.c#开始
then
...
fi#结束

或者写成:

if [ -f fred.c ]
then
...
fi
#! /usr/bin/bash
#检测文件是否存在
echo "input"
read filename
if [ -f "$filename" ]
then
	echo "$filename 存在"
else
	echo "$filename 不存在"
fi


#if test -f $filename
#then
	echo a.py存在
#fi

#查看文件类型
if [ -d "$filename" ]
then
	echo "$fielname 是一个文件夹"
else [ -f $filename ]
	echo "$filename 是普通文件"
else
	echo "$fielname 不存在"
fi
#! /usr/bin/bash
i=1
let "i+=1"
echo "i=$i"

循环 for while until

for:循环的次数由值的个数决定
#!/usr/bin/bash

for i in 1,2,3
do 
echo "i=$i"
sleep 1

done

在这里插入图片描述

#!/usr/bin/bash

for name in &(ls)
do
echo "$name"
done

在这里插入图片描述

while:满足判断条件就执行循环

在这里插入图片描述

在这里插入图片描述

Until:不满足条件就执行循环
#! /usr/bin/bash

until [ -f file.txt ]
do
    echo "not find file"
    sleep
done

以上代码没有找到file.txt就执行循环体内的代码

在脚本语言中,我们可以直接执行命令,让命令单独存放一行,他就会被当做一个命令被执行了

在这里插入图片描述

在这里插入图片描述

我们如何将命令执行的结果当做值赋给我们的变量

#! /usr/bin/bash

str=$(ls)
echo "$str"

在这里插入图片描述

case

在这里插入图片描述

在这里插入图片描述

函数

shell编程中函数没有返回值类型,我们可以认为他是所有类型都可以返回的,因为在shell中只要定义了变量不管是在函数中还是在脚本中,只要不做特殊声明,这个变量就会一直存在在脚本的运行周期中,所以有没有返回值没有太大的区别,因为我们可以直接调用局部变量。

#! /usr/bin/bash

fun()
{
	echo "fun run"
	str="hello"
	echo "str=$str"
	echo "\$#=$#"
	echo "\$1=$1"
	echo "\$2=$2"
}

my_add()
{
	echo "\$#=$#"
	echo "\$1=$1"
	echo "\$2=$2"
	
	res=`expr $1+$2`
	return res
	#	其实有没有return都是一样的,因为res现在全局可用
}

my_add 1 3
echo "\$?=$?"
#   $? 作用是取得上一行的运行结果,如果我们继续执行这一语句
echo "\$?=$?"
#此时就会输出0 因为echo的运行结果被认为是始终成功的,而在shell中,成功被当作是0

当我们在shell函数中定义过变量之后,要将不用的变量unset掉,以防止影响后面的脚本运行,或者通过声明local的方式将变量声明为函数内可用即可。

脚本调用C语言,C语言调用脚本

脚本调用C语言很简单,本来脚本程序中运行的就是可执行命令,当我们把C语言编译之后就会生成一个可执行命令,直接在脚本程序中写入该可执行文件,加上可执行程序的路径,我们就可以完成在脚本程序中调用C语言了。

使用C语言调用脚本就相对来说麻烦一点了,我们要知道脚本语言是可以当做命令来运行的,那么想一下在我们的C语言程序中,如何在程序执行过程中调用命令呢?想必大家不难想到,通过进程替换呗 ,当我们要调用脚本程序的时候直接通过进程复制+进程替换的方式将一个子进程替换为我们要执行的脚本程序,这样就可以完成在C语言中调用脚本程序了。

函数内可用即可。

脚本调用C语言,C语言调用脚本

脚本调用C语言很简单,本来脚本程序中运行的就是可执行命令,当我们把C语言编译之后就会生成一个可执行命令,直接在脚本程序中写入该可执行文件,加上可执行程序的路径,我们就可以完成在脚本程序中调用C语言了。

使用C语言调用脚本就相对来说麻烦一点了,我们要知道脚本语言是可以当做命令来运行的,那么想一下在我们的C语言程序中,如何在程序执行过程中调用命令呢?想必大家不难想到,通过进程替换呗 ,当我们要调用脚本程序的时候直接通过进程复制+进程替换的方式将一个子进程替换为我们要执行的脚本程序,这样就可以完成在C语言中调用脚本程序了。

写在最后的话

shell脚本编程的语法规则相对来说较为简单,想要用好脚本编程我们要进行命令的积累,因为脚本编程主要就是命令的集合应用,只有我们掌握更多的命令,才能更加得心应手的使用shell脚本编程。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值