指定解析器
#!/bin/bash -> 脚本第一行
跳转目录
cd /home
创建文件
touch hello.sh
进入文件
vim hello.sh
文件输出内容
echo "hello" >> hello.sh
查看文件内容
cat hello.sh
系统变量
$home -> 路径
$shell -> 解析器
$user -> 用户
声明局部变量
A=1 -> 等号两边不能有空格
B="hello world" -> 带空格需要用双引号
声明静态变量
readonly C=2 -> 不可注销
声明全局变量
export B
输出变量
echo $A
注销变量
unset A
特殊变量
bash hello.sh 1 2 3 -> 执行sh文件并传入3个参数
$0 -> 脚本名称(hello.sh)
$1 ~ $9 -> 第1~第9个入参(1 2 3)
${10} -> 从第10个入参开始需要使用大括号
$* -> 所有参数,作为一个整体
$@ -> 所有参数,不作为一个整体
执行指令状态
$? -> 0正确,非0不正确
运算符,左右要带空格
expr $[1 + 2] -> 3
expr $((1 + 2)) -> 3
if 流程
if [ $1 -eq 1 ]; then
echo " if "
elif [ $1 -eq 2 ]; then
echo " elif "
fi
if [ $1 -eq 1 ]
then
echo " if "
elif [ $1 -eq 2 ]
then
echo " elif "
fi
文件表达式
-f -> 文件是否存在
if [ -f path ]
-d -> 目录是否存在
if [ -d path ]
-s -> 文件存在且非空
if[ -s path ]
-r -> 文件存在且可读
if[ -r path ]
-w -> 文件存在且可写
if[ -w path ]
-x -> 文件才能在且可执行
if[ -x path ]
整数表达式
-eq -> 等于
if[ 1 -eq 1]
-ne -> 不等于
if[ 1 -ne 1]
-ge -> 大于等于
if[ 1 -ge 1]
-gt -> 大于
if[ 1 -gt 1]
-le -> 小于等于
if[ 1 -le 1]
-lt -> 小于
if[ 1 -lt 1]
字符表达式
case 流程
case $1 in
1)
echo " 1 "
;;
2)
echo " 2 "
;;
*)
echo " default "
;;
esac
while 流程
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s + $i]
i=$[$i + 1]
done
for 流程
s=0
for((i=1;i<=100;i++))
do
s=$[$s+$i]
done
返回文件名称
basename /home/hello.sh -> hello.sh
basename /home/hello.sh .sh -> hello
返回文件路径
dirname /home/hello.sh -> /home
迁移文件
cp /home/a/hello.sh /home/b -> 文件从a目录移动到b目录
查找文件
find /home |grep hello.*
授权端口
chmod 755 hello.sh
定时任务
crontab -e -> 输入指令
i -> 输入指令使之变更为新增模式
* * * * * -> 设置定时触发的脚本 (分 0~59 /时 0~23 /日 1~31 /月 1~12/ 星期 0~7)
0,30 10 * * * /app/cmd/hello.ksh -> 每天的10点整和10点30分执行一次
0 6-12/3 * * * /app/cmd/hello.ksh -> 每天6点到12点的,每隔3个小时执行一次
esc -> 按下键盘按键使之退出
:wq -> 输入指令使之保存并退出
enter -> 按下键盘按键使之完成整个操作