Linux中Shell脚本的简单语法

变量

定义变量:
A=2
等号前后不能有空格,这种是局部变量 ;
export c=3 这种是全局变量
撤销变量:
unset 变量名
readonly B=3
只读变量,不能被unset,虚拟机重启后,才可以消失
bash中,变量默认是字符型,无法直接进行运算

变量的值如果有空格,需要用双引号或单引号括起来
B=i love you
//有空格,不行,需要用双引号或单引号括起来
B='i love you '

把命令的结果返回给一个变量,可以用反引号,或者$()

B=$(ls -al /opt)  或者 B=`ls -al /opt`

给脚本输入参数
$n : n为数字,$0代表脚本的名称,$1-9代表第一个到第九个参数,10个以上参数用大括号包含${10}
例:

touch a.sh
vi a.sh

脚本内容:

#!/bin/bash
echo "$0 $1 $2"  //输出脚本名称,第一个参数和第二个参数
调用脚本:bash a.sh a b  
//a是第一个参数:a->$1  ; b是第二个参数: b->$2
结果为: a.sh a b 

$#: 获取所有输入参数的个数,常用于循环
bash a.sh a b 输入两个参数,所以$#为2

$*:获取所有参数,把所有参数当做一个整体
示例:

#!/bin/bash
for i in "$*"
do
        echo "参数为$i"
done

只循环了一次
$@:获取所有参数,把每个参数分别对待
示例:

#!/bin/bash
for i in "$@"
do
        echo "参数为$i"
done

有几个参数,就循环了几次

$?:判断上个命令是否正确执行,正确:0,错误:非0,具体是什么数字不一定

cd / 执行成功,$?返回0 .sh 执行失败,$?返回非0

运算符

语法:
1、$[运算式]
2、expr 加:+ 减: - 乘: * 除: / 取余:% 备注:expr运算符前后要有空格
expr 3 + 2
计算(2+3)*4:

 expr  `expr 2 + 3`  \* 4  或者  $[(2+3)*4]

条件判断

语法:[ 条件 ] 备注: 条件前后有空格
在这里插入图片描述
在这里插入图片描述
-f file -e file -d file
在这里插入图片描述
!后面要有个空格
示例:

#!/bin/bash
fullPath=$1
if [ ! -e $fullPath ]
then
       echo 'notdelete'
elif [ -d $fullPath  ]
then
        echo "mulu"
elif [ -f $fullPath ]
`then
        echo 'delete'
fi

在这里插入图片描述
23>=22 ? 结果是true,所以执行 echo $? 的结果是0
$?的结果为0表示true,非0表示false
23<=22 ? 结果是false,所以执行 echo $? 的结果是非0
条件非空为true [ ad ] 返回true,[ ] 返回false

&&:短路与,和java中一样
||:短路或,和java中一样
在这里插入图片描述
第一条语句:[ a ] 为true,echo yes为true,所以||后面的echo no不执行
第二条语句:[ a ] 为true,[ ]为false,所以还得看||后面的是否满足

流程控制
if语句:if后面有空格,条件前后有空格;else if 在这里的写法为 elif

if  [ 条件 ]; then 
程序
fi

或者

if  [ 条件 ]
      then 
程序
fi

或者

if  [ 条件 ]
      then 
程序1
elif  [ 条件 ]
then
程序2
else
程序3
fi

例子:参数为1,输出1;参数为2,输出2;其他参数,不输出任何东西

#!/bin/bash                            
if [ $1 -eq 1 ]
then
        echo "1"
elif [ $1 -eq 2 ]         
then
        echo "2"
fi

case语句:

case $变量名 in
"值1")
	如果变量的值等于值1,则执行程序1;
;;
"值2")
	如果变量的值等于值2,则执行程序2;
;;
*)
	如果都不等于变量的值,则执行此程序;
;;
esac

示例:参数为1,输出1;参数为2,输出2;其他参数,输出3

#!/bin/bash
case $1 in
1)
        echo "1"
;;
2)
        echo "2"
;;
*)
        echo "3"
;;
esac

for循环语句1:

for(( 初始值;循环条件;变量变化 ))
do
程序
done  
示例:计算1-100的和
#!/bin/bash
s=0
for(( i=1;i<=100;i++ ))
do
        s=$[$s+$i]
done
echo $s

for循环语句2:

for 变量名 in 值1 值2 值3
do
程序
done
示例:打印所有输入的参数
#!/bin/bash
for i in $*
do
        echo $i
done

while语句:条件前后有空格

while [ 条件判断 ]
do
程序
done

示例:计算1到100的和

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s+$i]
        i=$[$i+1]
done
echo $s
read读取控制台输入
read(选项)(参数)
选项:
-p:提示语句
-t:读取的等待时间,必须在这个时间内输入语句,不然会超时,单位是s
参数:
读取到的值存入该变量中
示例:
#!/bin/bash
read -t 3 -p "enter your name in 3s" name
echo $name

函数

系统函数:
basename : 没有后缀,去除掉最后一级前面的内容
在这里插入图片描述

basename : 有后缀,先去除掉最后一级前面的内容再去除掉后缀的内容
在这里插入图片描述

dirname:去除掉最后一级的内容

在这里插入图片描述

自定义函数

语法:

[ function ] 函数名 [ () ]
{
程序
[ return int ]
}

调用: 函数名 也可以传参进去,用$n来获取输入的参数
示例:计算两数之和

#!/bin/bash
function sum(){
        s=0
        s=$[$1+$2]
        echo $s
}
read -p "input1 " n
read -p "input2 " m
#函数调用,并把n和m分别作为第一个参数和第二个参数传进去
sum $n $m     

备注:如果想把调用shell时候的参数传进来,需要用中间变量来获取,再通过中间变量来传入
示例:

#!/bin/bash
#获取shell传入的第一个参数
s1=$1
#获取shell传入的第二个参数
s2=$2
function sum(){
        s=0
        s=$[$s1+$s2]
        echo $s
}
sum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值