Shell脚本
基本输出
echo "hello world!"
echo -e //开启转译,显示换行
echo `date`
read a //输入
//保存文件脚本
chmod +x ./test.sh //作为可执行程序
./test.sh
/bin/sh test.sh //作为解释器参数
变量
your_name="runoob.com" //命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
echo $your_name
echo ${your_name}
readonly your_name //规定变量只读
unset your_name //删除变量,无法删除只读
greeting="hello, "$your_name" !" //尽量双引号
greeting_1="hello, ${your_name} !"
echo ${#string} //字符串长度
echo ${string:1:3} //从第二个字符开始截取三个字符
string="runoob is a great site" //字符 i 或 o 的位置(哪个字母先出现就计算哪个)
echo `expr index "$string" io` # 输出 4
array=(value1,value2,value3) //数组
array[0]=value0
${array[0]}
${array[ @ | * ]}
${#array[*]} //长度,@也行
#这是一个注释
:<<! ... ! //大段内容注释
脚本参数传递
echo "执行文件名: $0";
echo "第一个参数为: $1";
echo "第二个参数为: $2";
echo "第三个参数为: $3";
chmod +x test.sh
./test.sh 1 2 3
echo
for i in "$*"; do
echo $i
done
echo
for i in "$@"; do
echo $i
done
chmod +x test.sh
./test.sh 1 2 3
-- $* 演示 ---
1 2 3
-- $@ 演示 ---
1
2
3
运算符
val=`expr 3 + 4` //expr运算符,用``,其他的也一样
let a=5+4
let a++ //a-- a+=10
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ 10 != 20 ]; then echo "10等于20"; fi //关系运算符
if [ -z $a ]
then
echo "-z $a : 字符串长度为 0"
else
echo "-z $a : 字符串长度不为 0"
fi
if [ $a ]
then
echo "$a : 字符串不为空"
else
echo "$a : 字符串为空"
fi
//https://www.runoob.com/linux/linux-shell-basic-operators.html
printf
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
姓名 性别 体重kg
郭靖 男 66.12
杨过 男 48.65
郭芙 女 47.99 //c的转化,其实差不多
流程控制
if else
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
for 循环
for var in ${array[@]}
do
printf "${var}\n"
done
for((i=1;i<=5;i++));do
echo "这是第 $i 次调用";
done;
while 循环
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
while read FILM //可输入
do
echo "是的!$FILM 是一个好网站"
done
until 循环
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
case continue break
函数
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
输出重定向
https://www.runoob.com/linux/linux-shell-io-redirections.html