Linux学习系列(十七):Shell编程

文章介绍了Shell编程的基础知识,包括变量的使用(本地变量与环境变量)、条件语句(if-else,case)和循环结构(for,while,until),以及函数的定义和调用。强调了Shell编程的效率特点和文件执行标志。
摘要由CSDN通过智能技术生成

shell编程

反引号 -命令 也不用,直接写也行

  • 优点可以快速的编程,直接去掉已有的命令

    缺点:效率不高

  • 解释型,需要解释器执行,就像音乐播放器 开发效率高,执行效率低

    编译型,需要编译链接 生产二进制可执行程序(指令) 开发效率低,执行效率高

  • 一般以.sh为结尾,但不这么干也行,但一般都是这样,为了便于知道是个shell程序

#!/usr/bin/bash //#!后面跟解释器

echo "hello shell" #打印 需要隔一个空格
    
exit 0
  • 运行,一般将其设为可执行文件,然后直接运行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qgOs2PJn-1686153239734)(C:\Users\李嘉昌\AppData\Roaming\Typora\typora-user-images\image-20230604150005386.png)]

1.变量

在shell中没有类型

本地变量
#!/usr/bin/bash

#echo "hello world" #代表注释

#本地变量:从键盘获取或者常量
#这个值是相当于引用技术,变量是一个指针指向存储在一个数据区
#而且没有类型一说,你可以当作任何类型,只不过用的时候用相应的命令

str="hello"  #  =前后不能有空格
str=hello #有没有""都无所谓
str=hello world #但是这就不可以了 因为有空格来间隔,只会显示hello
str="hello world" #这时需要加上""以表示一个整体
    
    
var=100 #这也是有没有""都无所谓,当做什么就用对应的命令就行了
echo "$var" #会取var的值
echo '$var' #单引号会强制看成一个字符串

#赋值
s=$str
echo "s=$s" #双引号最好加上,因为可以有一些运算符之类的

#算数运算:好像expr只能弄成表达式不能赋值,而let直接跟算数运算一样
let "var += 1"
var=`expr $var +1`
var=`expr $var \* 3` #*需转义
let "var*=200" #这个好像就不用了
echo "var=$var"
    
#从键盘获取
read line #相当于从键盘获取字符,给line
echo "line=$line"

exit 0
环境变量

从父进程中继承过来的

PATH #可执行文件执行的路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQgjIcCL-1686153239735)(C:\Users\李嘉昌\AppData\Roaming\Typora\typora-user-images\image-20230604162258013.png)]

#!/usr/bin/bash

echo "\$#=$#" #传递给脚本的参数个数
echo "\$$=$$" #脚本进程号
echo "\$0=$0" #该脚本的名字

echo "\$1=$1" #该脚本传的第一个参数
echo "\$1=$2" #该脚本传的第二个参数

2.条件

在这里插入图片描述

在这里插入图片描述

#if语句示例1
if [ 3 -lt 5 ]   #注意这个空格是有严格要求的,少了不行,多了不好看
then             #注意不论是if还是elif后面都要跟then
	echo "3>5"
else
	echo "3<5"
fi               #结尾要跟fi以示结束标志

#if语句示例2
a=10
read b
if [ $a -gt $b ]
then
	echo "a > b"
elif [ $a -lt $b ]
then
	echo "a < b"
else
	echo "a = b"
fi

#if语句示例3:可以用&& ||之类的逻辑运算符
a=10
read b
if [ $a -gt $b ] || [ $a -lt $b ] #这里当然只是为了演示 
then
	echo "a ! b"
else
	echo "a = b"
fi

在这里插入图片描述

#!/usr/bin/bash

echo "input"
read line
case $line in
	yes | y) echo "this is yes";;
	no | n) echo "this is no";;
	* ) echo "this is other"
esac

echo "input"
read line
case $line in
	[Yy]|[Ee]|[Ss]) echo "this is yes";;#各种组合Yes YEs Y Ye
	[Nn]|[Oo]) echo "this is no";;
	* ) echo "this is other"
esac

3.循环

在这里插入图片描述

#!/usr/bin/bash

for i in 1 2 3
do
	echo "i=$i"
done

str=`ls` #告诉ls是一个命令
#str=$(ls)
for i in $str
do
	echo "i=$i"
done

#也可以像C语言的格式一样
for ((i=0;i<6;++i))
do
	echo "i=$i"
done

在这里插入图片描述

#!/usr/bin/bash

i=0
while [ $i -lt 10 ]
do
	echo "i=$i"
	let "i+=1"
done
#0 1 2 .. 9

在这里插入图片描述

没满足就执行,直到条件满足才停下来

#!/usr/bin/bash

i=0
until [ $i -gt 10 ]
do
	echo "i=$i"
	let "i+=1"
done
#0 1 2 .. 10

4.函数

#!/usr/bin/bash

fun()
{
	$#   #为传参个数
	$1   #为传入的第一个参数
	$2   #为传入的第二个参数
	...
	unset 变量名 #将该变量从解释器中移除
}

fun a b c #这样去调用
a=$?        #指的是上一行的执行结果,可以拿这种方式来取返回值,但运行第二次就不行了,因为取得是上一行的执行结果

#但这不像C直接可以通过变量名来取值,只有解释器不消失,该变量就不会消失
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lijiachang030718

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值