- 基础语法
- 文件头必须要有
#!/bin/sh
- shell脚本里尽量使用绝对路径
- 使用
.sh
结尾
#!/bin/sh #This is to show what a example looks like. echo "My First Shell!" echo "This is current directory." # 展示当前路径 /bin/pwd echo echo "This is files." # 列出当前路径下的文件或文件夹 /bin/ls
#!/bin/sh /bin/date +%F >> /test/shelldir/ex2.info echo "disk info:" >> /test/shelldir/ex2.info /bin/df -h >> /test/shelldir/ex2.info echo >> /test/shelldir/ex2.info echo "online users:" >> /test/shelldir/ex2.info /usr/bin/who | /bin/grep -v root >> /test/shelldir/ex2.info echo "memory info:" >> /test/shelldir/ex2.info /usr/bin/free -m >> /test/shelldir/ex2.info echo >> /test/shelldir/ex2.info #将上面收集的信息发送给root用户,并且删除临时文件 /usr/bin/write root < /test/shelldir/ex2.info && /bin/rm /test/shelldir/ex2.info #crontab -e #0 9 * * 1-5 /bin /sh /test/ex2.sh
- 文件头必须要有
- 变量
- 变量一般使用大写字母定义
- 使用变量时要加前缀
$
- 给变量赋值时
=
号俩边应该没有空格 - 可以将命令的执行结果赋值给变量,但是要使用命令替换符号
- 单引号将内容原封不动输出
- 双引号会将变量值输出
- 使用set命令查看所有的变量
- 使用unset命令删除指定的变量
#!/bin/sh # 将命令的执行结果赋值给变量,但是要使用命令替换符号 DATE=`/bin/date +%Y%m%d` echo "TODAY IS $DATE" # 特殊的位置占位变量 $1,$2,$3分别是shell脚本执行时所传递的参数 # 每个shell最多的参数为9个,位置占位符最大为$9 /bin/ls -l $1 /bin/ls -l $2 /bin/ls -l $3
- 特殊变量
#!/bin/sh DATE=`/bin/date +%F` echo "today is $DATE" # 这个程序的参数个数 echo '$# :' $# # 执行上个后台命令的pid echo '$! :' $! # 这个程序的所有参数 echo '$* :' $* # 显示执行上一个命令的返回值 echo '$? :' $? # 这个程序的pid echo '$$ :' $$ # $(0-9)显示占位变量 echo '$0 :' $0
- 键盘录入
- 直接执行以下shell文件代码,输入三个参数,输入回车
- sh -x *.sh可以跟踪执行代码
#!/bin/sh read f s t echo "the first is $f" echo "the second is $s" echo "the third is $t"
- shell运算
- expr命令,对整数进行运算
- expr的运算必须用空格间隔开
- * 表示转义字符
- 先乘除后加减,如果要调整优先级,则要加命令替换符
-
也可以对变量进行运算操作
- 测试语句
-
配合控制语句使用,不应单独使用
-
- if 语句
#!/bin/sh
# if test $1 then ... else ... fi
# if test -d $1 测试语句可以简写为 if [ -d $1 ] , 注意各个部分要有空格
if [ -d $1 ]
then
echo "this is a directory!"
else
echo "this is not a directory!"
fi
- elif 语句、
#!/bin/sh
# if test then ... elif test then ... else ... fi
if [ -d $1 ]
then
echo "is a directory!"
elif [ -f $1 ]
then
echo "is a file!"
else
echo "error!"
fi
- 逻辑与和逻辑或
#!/bin/sh
# -a 逻辑与(and) -o 逻辑或(or)
if [ $1 -eq $2 -a $1 = 1 ]
then
echo "param1 == param2 and param1 = 1"
elif [ $1 -ne $2 -o $1 = 2 ]
then
echo "param1 != param2 or param1 = 2"
else
echo "others"
fi
- for循环
#!/bin/sh
# for var in [名字表] do ... done
for var in 1 2 3 4 5 6 7 8 9 10
do
echo "number is $var"
done
- select 语句
#!/bin/sh
# select var in [params] do ... done
select var in "java" "c++" "php" "linux" "python" "ruby" "c#"
do
break
done
echo "you selected $var"
- case 语句
#!/bin/sh
read op
case $op in
a)
echo "you selected a";;
b)
echo "you selected b";;
c)
echo "you selected c";;
*)
echo "error"
esac
- while 循环语句
#!/bin/sh
#while test do ... done
num=1
sum=0
while [ $num -le 100 ]
do
sum=`expr $sum + $num`
num=`expr $num + 1`
done
#sleep 5
echo $sum
- continue和break语句
#!/bin/sh
i=0
while [ $i -le 100 ]
do
i=`expr $i + 1`
if [ $i -eq 5 -o $i -eq 10 ]
then continue;
else
echo "this number is $i"
fi
if [ $i -eq 15 ]
then break;
fi
done