【.sh文件】
【.sh文件】:Shell脚本/Bash脚本
【文件权限】
r
读:打开并查看文件内容
w
写:编辑文件内容
x
执行:运行该文件
【创建】
1
touch xxx.sh
gedit xxx.sh
2
在编辑界面写入
//第一行必须有
#!/bin/bash
//后面是测试
echo "Hello World!!"
sleep 200
echo "Hello World!!"
sleep 200
3
赋予.sh
文件权限
chmod +x xxx.sh
4
执行.sh
文件 四种方式
①$ ./test.sh
必须要有x权限->ctrl+c直接终止
②$ sh test.sh
有r权限即可
③$ . test.sh / source test.sh
有r权限即可->ctrl+c后会运行完
作为参数传给解译器
④bash script.sh
启动Bash解释器,并让它读取并执行script.sh
文件中所包含的命令
【基本语法】
变量
name="Anyoung"
number=5
循环:记得do...done
//循环输出1~7
for i in {1..7}
do
echo $i
done
i=5
//循环:i是否大于3
while [ $i -gt 3 ]
do
echo $i
i=$((i-1))
done
条件判断:if...fi
if [ $num -gt 10 ]
then
echo "Greater than 10"
else
echo "Less than 10"
fi
逻辑运算符
逻辑运算式外面需要加中括号[ ]
等于 -eq / ==
不等于 -ne / !=
大于 -gt
大于等于 -ge
小于 -lt
小于等于 -le
//想用< >=之类的需要加双括号(())
逻辑与或非 && || !
常见命令
echo
输出字符串/变量值
echo "Hello, World!"
echo $name
read
:从标准输入中读取用户输入
echo "What is your name?"
read name
echo "Hello, $name!"
set -e
错误处理
set -e
echo "Before error"
command_not_found
echo "After error"
参数传递
日志 使用echo
LOGFILE=/var/log/script.log
echo "$(date) Script started" >> $LOGFILE
echo "Hello, World!"
echo "$(date) Script finished" >> $LOGFILE
队内代码rm_upstart
内用到的.sh指令
register_service.sh
其实就是Linux文件指令
HOME_DIR=$(eval echo ~$USER_NAME)
//eval:先执行里面的指令再赋值
//~$USER_NAME:家目录
"$(id -u)" -ne 0
//id -u获取用户id
//根目录id为0
exit 1
//错误退出
chmod +x ./rm_clean_up.sh
//给**其他文件**添加可执行权限
cp ./rm_clean_up.sh /usr/sbin/
//复制文件到目录
read -r -d '' SERVICE_CONTENT << EOF
[Unit]
Description=FYT2024 Vision Project
After=network.target
[Service]
User=$USER_NAME
Type=simple
ExecStart=/usr/sbin/rm_watch_dog.sh
ExecStop=/usr/sbin/rm_clean_up.sh
Restart=always
TimeoutStopSec=10
RestartSec=10s
[Install]
WantedBy=multi-user.target
EOF