shell文件开始要写#/bin/sh或#/bin/bash
但由于是两种不同的解释方法所以语法可能有差异,我选择了前者
1.字符串拼接,得到字符串长度,注意变量的赋值操作等号两侧不能加空格
#/bin/sh
str="abc"
getstr="${str}def"
echo $getstr
echo ${#getstr}
2.字符串中查找字符
#/bin/sh
str="abcdefg"
val=`expr index "$str" d`
echo ${val}
注意这里数组的下标示从1开始而不是从0开始
3.数组的定义,修改值,访问全部值,打印数组大小
#/bin/sh
buf=(1 2 3 4 5)
buf[0]=6
echo ${buf[0]}
echo ${buf[@]}
echo ${#buf[@]}
4.使用传进来的参数,用法类似于给main函数传参
#/bin/sh
echo $0 $1 $2
echo $*
echo $#
$0为文件名,或者是命令本身,$1开始是命令之后传的参数
5.基本运算符,可以看出不能直接使用C的运算符来运算,要使用`expr`格式,且运算符两边要有空格
#/bin/sh
val=1+2
val2=`expr 1 + 2`
echo $val $val2
#/bin/sh
a=20
b=10
c=10
val=`expr $a + $b`
echo $val
val=`expr $a - $b`
echo $val
val=`expr $a \* $b`
echo $val
val=`expr $a / $b`
echo $val
if [ $c == $b ]
then
echo "c=b"
fi
if [ $a != $b ]
then
echo "a!=b"
fi
if [ $a -gt $b ]
then
echo "a>b"
fi
if [ $b -lt $a ]
then
echo "b<a"
fi
if [ $c -ge $b ]
then
echo "c>=b"
fi
if [ $c -le $b ]
then
echo "c<=b"
fi
6.检测键盘输入
#/bin/sh
echo "please input a string"
read str
echo -e "$str \n"
echo加上-e参数表示""把里的字符转义之后输出,所以\n才能输出成换行符
7.把命令的执行结果存起来
#/bin/sh
path=`pwd`
echo $path
8.printf输出
#/bin/sh
printf "name is %-10s sex is %-1s height is %4.2f\n" sjn nan 130.567
printf时在%s中设置-n可设置字符串的最小长度,-表示左对齐,n表示最小长度,若不足则用空格补齐,%4.2f表示保存到小数点后2位
9.检测文件是否存在 test -e
#/bin/sh
if test -e ./test.sh
then
echo "yes"
else
echo "no"
fi
10.for循环和while循环
#/bin/sh
for val in 1 2 3 4 5
do
echo $val
done
echo "input a str"
while read path
do
echo "$path is your input"
echo "try ctrl+c to break"
done
11case语句
#/bin/sh
echo "input a value"
while read val
do
case $val in
1) echo "1"
;;
2) echo "2"
;;
*) echo "not 1 or 2"
;;
esac
done
12.函数定义和传参,返回值的使用
#/bin/sh
fun(){
a=$1
b=$2
val=`expr $a + $b`
return $val
}
fun 5 6
res=$?
echo $res
注意这里函数的传参和之前讲的命令传参规则一样,函数返回值用$?来访问
13.在脚本中引用其他脚本的语法有两种,第一种“点+空格+文件名”,第二种“source+文件名”
. ./test1.sh
source ./test2.sh