欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux中Shell脚本的简单语法

程序员文章站 2024-02-19 14:52:28
...

变量

定义变量:
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

只循环了一次
[email protected]:获取所有参数,把每个参数分别对待
示例:

#!/bin/bash
for i in "[email protected]"
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]

条件判断

语法:[ 条件 ] 备注: 条件前后有空格
Linux中Shell脚本的简单语法
Linux中Shell脚本的简单语法
-f file -e file -d file
Linux中Shell脚本的简单语法
!后面要有个空格
示例:

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

Linux中Shell脚本的简单语法
23>=22 ? 结果是true,所以执行 echo $? 的结果是0
$?的结果为0表示true,非0表示false
23<=22 ? 结果是false,所以执行 echo $? 的结果是非0
条件非空为true [ ad ] 返回true,[ ] 返回false

&&:短路与,和java中一样
||:短路或,和java中一样
Linux中Shell脚本的简单语法
第一条语句:[ 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 : 没有后缀,去除掉最后一级前面的内容
Linux中Shell脚本的简单语法

basename : 有后缀,先去除掉最后一级前面的内容再去除掉后缀的内容
Linux中Shell脚本的简单语法

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

Linux中Shell脚本的简单语法

自定义函数

语法:

[ 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
相关标签: shell linux