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
只循环了一次
[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]
条件判断
语法:[ 条件 ] 备注: 条件前后有空格
-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
上一篇: Linux的shell脚本
下一篇: PHP-重写-笔记