shell的作用是解析用户的指令,将shell指令按照特定的流程,组合形成脚本。
查看当前系统shell版本:
编写一个简单的shell脚本后,可以使用下面几种方法来执行:
1,使用chmod给脚本增加x权限,如:chmod +x test.sh
2,/bin/sh 或者 /bin/bash 执行脚本(会创建子进程)
3,source ./test.sh 脚本执行
4,小括号方式,会创建子进程
环境变量,可以直接设置,例如var=100,使用unset var可以删除
通配符:
* 匹配一个或多个任意字符
? 匹配一个任意字符
[若干字符] 匹配括号内任意一个字符
命令代换:
小括号:
算术转换:
进制转换:
转义字符和特殊字符:
条件分支:
$? 代表返回值0为真,1为假
test 或者 [] 可以作为表达示判断
gt(大于),lt(小于),eq(等于),ne(不等于),le(小于等于),ge(大于等于)
括号判断,-f是普通文件,-d是文件夹,-z判断字符串是否为空
逻辑判断:
逻辑非 !
逻辑与 -a
逻辑或 -o
如:[ -f a.txt -a -d a.txt ]
要注意括号两边的空格,如果没有会出错
if分支语句:
echo "are you boy?"
read yy
if [ "$yy" = "yes" ];then
echo "you are a boy"
elif [ "$yy" = "no" ]
echo "you are a girl"
else
echo "idk"
fi
case分支语句:
echo "are you a boy?"
read yy
case "$yy" in
y|yes|YES)
echo "you are a boy";;
[nN]*)
echo "you are a girl";;
*)
echo "idk"
exit 1;;
esac
for循环语句:
for i in x y z
do
echo "$i"
done
while循环语句:
echo "please input your passwd"
read yy
while [ "$yy" != "123" ];do
echo "sorry,try again"
read yy
done
echo "login success"
计算1+2+3+。。。。100求和:
sum=0
i=1
while [ $i -lt 101 ];do
sum=$[sum+i]
i=$[i+1]
done
echo $sum
位置参数和特殊变量:
$0 相当于C语言main函数的argv[0]
$1、$2... 这些称为位置参数(Positional Parameter),相当于C语言main函数的argv[1]、argv[2]...
$# 相当于C语言main函数的argc - 1,注意这里的#后面不表示注释
$@ 表示参数列表"$1" "$2" ...,例如可以用在for循环中的in后面。
$* 表示参数列表"$1" "$2" ...,同上
$? 上一条命令的Exit Status
$$ 当前进程号
函数的使用:
foo(){
echo "$0 - $1"
}
echo "start call foo"
foo 11 22
echo "end call"
远程文件传送补充:
scp 1.txt ubuntu@192.168.11.11:/home/ubuntu