shell

前言

#!声明脚本的解释器

#!/bin/bash

变量

无需声明类型可以直接使用,空格之间不能加空格。$变量名引用变量,$1 $2引用从外面传进来的参数。

#!/bin/bash

name=5t5
age=23 #age = 23,错误 不能有空格

echo "$name : $age"
echo "$1 : $2"

调用脚本:

./1.sh 5t5 23

注意:双引号引起来的一段字符中,是可以解析变量的数值的,而单引号引起来的就不可以。

拿到命令

可以使用:$(命令)的方式来直接拿到某些命令的结果,如:

#!/bin/bash

path=$(pwd)

echo $path

运算符

算数运算符

使用$((算数表达式)),可以求出一个算数表达式的值。

#!/bin/bash

a=2
b=4

echo $(($a + $b)) #输出6
echo $(($a ** $b)) #输出16,即2的4次方

比较运算符

-eq #等于
-ne #不等于
-lt #小于
-le #小于等于
-gt #大于
-ge #大于等于

文件相关的判断:

-e #文件存在
-f #文件存在且是一个普通文件
-s #文件存在且非空
-d #目录存在
-r
-w
-x #检查当前用户对该文件是否有对应权限

逻辑运算符

和c语言一样

语句

条件语句

基本语法:

if [ 条件表达式 ];then  #注意条件表达式两遍留空格

elif [ 条件表达式 ];then

else

fi

例1:外界传入俩数,判断大小关系:

#!/bin/bash

if [ $1 -eq $2 ];then
	echo "$1 = $2"
elif [ $1 -lt $2 ];then
	echo "$1 < $2"
else
	echo "$1 > $2"
fi

例2:外界传入一个文件名,判断该文件是否存在

#!/bin/bash

if [ -e $1 ];then
	echo "$1存在"
else
	echo "$1不存在"
fi

例3:外界传入一个文件名,判断该文件是否存在且可写

#!/bin/bash

if [ -e $1 ] && [ -w $1 ];then
	echo "$1存在且可写"
elif [ -e $1 ];then
	echo "$1不可写"
else
	echo "$1不存在"
fi

循环语句

shell中支持三种循环语句:whileforuntil

for

基本语法:

for 变量名 in 集合
do

done

使用示例:

#!/bin/bash

for name in rina sova jett sage clove
do
	echo $name
done

输出为:

rina
sova
jett
sage
clove

实际上就是让name遍历了集合rina sova jett sage clove
如果是数字,可以使用seq指令生成一个数字集合,如seq 1 10,就可以生成一个1到10的数字集合。
示例:打印一个1-100的结果:

#!/bin/bash

for i in $(seq 1 100)
do
	echo -n "$i " #-n可以不空格输出
done

例子:写一个脚本,判断一个路径下所有的文件是目录还是一般文件

#!/bin/bash
  
for i in $(ls $1)
do
        if [ -d "$1/$i" ];then
                echo "$i:目录"
        elif [ -f "$1/$i" ];then
                echo "$i:文件"
        fi
done

while和until

基本语法:

while [条件表达式]
do
done

until [条件表达式]
do
done

whileuntil基本一致,while就是C语言中的while,即表达式成立即循环,不成立即跳出循环,而until恰好相反,表达式不成立则循环,成立则跳出循环。
例子:使用 while 打印1加到100:

#!/bin/bash
  
i=1
sum=0

while [ $i -le 100 ]
do
        sum=$((sum + i))
        i=$((i + 1))
done
echo "sum:$sum"

函数

基本语法:

function()
{

}

函数的调用:

#!/bin/bash

add() #函数名
{
	echo $(($1 + $2)) #将传入的两个参数加起来返回
}

echo $(add 4 7) #调用子函数

※子函数的echo其实是返回值
子函数内部可以定义临时变量,但需要使用local关键字

add()
{
	local num1=$1
	local num2=$2
	echo $(($num1 + $num2))
}

除了使用echo返回外,函数也跟C一样可以使用return语句返回:

func()
{
	return $1; #使用return语句返回
}
func 30
num=$? #用$?可以接取上一个函数调用的返回值
echo $num

返回回来的值会临时存储在$?中,可以随时调用。

练习

留白

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值