shell脚本是shell命令按一定语法组成的文件,首先在内存中寻找内置命令,找不到再到path文件路径中寻找外部命令。
打开vi编辑器,后缀为.sh
sudo vi hello.sh
#!/bin/bash
#指定解析器
echo "hello,woeld"
:wq保存退出
修改权限
sudo chmod 777 hello.sh
shell启动方式有4种
./hello.sh
.bin/bash hello.sh
source hello.sh
.hello.sh
shell脚本语法
#定义变量3种方法
var=1234 #没空格
echo "$var"#使用变量:可加上大括号
var='1234 567' #有空格
var1="${var}aa" #双引号适用于有引用情况下
echo "$var1" #打印变量
#将命令结果赋值给变量
var2=`pwd` #反括号!!!
var2=$(command)
#删除变量
unset var
特殊变量
#字符串拼接
var1=$(pwd)aaa
#读取键盘输入
read a
read b
echo "${a}"
echo "${b}"
#加上提示
read -p "input a:" a
#退出当前进程
exit
#若exit 111,则echo $?打印111(上个命令的退出状态)
#对整数进行数学运算
var1=(( a+b ))
#逻辑与或
&& ||
#检测条件是否成立
test expression
[expression]
#例如:
test $a -eq $b && echo "a==b" #a=b则输出后面语句(通路)
test $a -eq $b || echo "a!=b" #a=b则不输出后面(断路),a不等于b则输出后面的
[ $a -eq $b ] && echo "a==b"
[ $a -gt $b ] || echo "a=<b" #判断是否大于
[ -z $a ] || echo "a=<b" #判断字符串a是否为空,非空则打印
[ -d $a ] && echo "${a}" #a是文件目录则输出文件目录
#管道 命令1 | 命令2
ls | grep "123.txt" #查找ls所显示目录中包含123.txt的文件
if语句
#if
if [ $a -eq $b ]
then
echo "a=b"
fi
#if else
if [ $a -eq $b ]
then
echo "a=b"
else
echo "a!=b"
fi
#if elif else
if [ $a -eq $b ]
then
echo "a=b"
elif [ $a -gt $b ]
then
echo "a>b"
else
echo "a<b"
fi
case 语句
case $a in
1)
echo "a=1"
;;
2)
echo "a-=2"
;;
*)
echo "a!=1&&a!=2"
;;
esac
for in循环
for n in 1 2 3 4 5 6 7 8 9 10 #具体值
do
echo "$n"
done
for n in {1..10} #取值范围
do
echo "$n"
done
#命令执行结果或者shell通配符
for n in $(ls /bin/*sh)
do
echo "$n"
done
for n in $* #特殊变量$*
do
echo "$n"
done
for n in $@ #特殊变量 $@
do
echo "$n"
done
上面两个运行结果一样,输入1 2 3 4,输出
1
2
3
4
$*加上”“就不一样了,$@加上还是一样
for n in ”$*“ #特殊变量$*
do
echo "$n"
done
输出1 2 3 4,把输入视为一个整体
while循环
while (( n < 10 ))
do
echo "${n}"
n=$(( n+1 ))
done
函数
function my_name(){
echo "embedfire"
}
在终端输入my_name即可调用