批量修改文件名称
for file in ./*
do
echo mv -vf $file $begin_{file}_end
done
先查看上面命令的合理性,再重定向 | bash
执行
检查参数
if [ $# -ne 1 ]; then
echo "$0 GPIO"
exit 1
fi
仅限 root 用户
if [ "root" != "$(whoami)" ]; then
echo "ONLY the root can do it!"
exit 1
fi
重定向调试与日志
DBG()
{
echo $* > /dev/null
}
LOG_FILE=/tmp/$(basename $0).log
LOG()
{
DBG $*
echo "$(date +%Y/%m/%d-%H:%M:%S) $(basename $0)[$$]: $*" >> $LOG_FILE
}
自动应答 expect 实现 scp 远程复制
PASSWD=your_passwd
REMOTE_USER=root
REMOTE_IP=192.168.1.102
REMOTE_DIR=/opt/log
expect << EOF
set timeout 10
spawn scp -r ${REMOTE_USER}@${REMOTE_IP}:${REMOTE_DIR} ./
expect {
"password" {send "${PASSWD}\r";}
"yes/no" {send "yes\r"; exp_continue;}
}
expect eof
EOF
输出批量数据到指定文件
DNS1=114.114.114.114
cat > ./ip.conf << EOF
{
"eth0_conf": {
"ipaddr": "192.168.1.99",
"gateway": "192.168.1.1",
"netmask": "255.255.255.0",
"dns1": "$DNS1"
}
}
EOF
判断语句
if grep -q root /etc/passwd ; then
echo "find root"
elif ! grep -q daemon /etc/passwd ; then
echo "no daemon"
fi
多个条件 AND 判断
if [ "$USER" = "root" ] && [ "$LOGNAME" = "root" ]; then
echo "logname same as user are root"
else
echo "logname is NOT user"
fi
多个条件 OR 判断
if [ "$USER" = "root" ] || [ "$LOGNAME" = "root" ]; then
echo "is root"
else
echo "is NOT root"
fi
for 循环
for entry in $(cat /etc/passwd)
do
echo $entry | cut -f1 -d:
done
while 循环
count=0
while [ $count -lt 10 ]
do
echo $count
count=$(expr $count + 1)
done
test 测试命令
数值比较
功能 |
命令 |
意义 |
助记词 |
相等 |
if [ $n1 -eq $n2 ] |
检查 n1 是否与 n2 相等 |
equal |
大于等于 |
if [ $n1 -ge $n2 ] |
检查 n1 是否大于等于 n2 |
great equal |
大于 |
if [ $n1 -gt $n2 ] |
检查 n1 大于 n2 |
great than |
小于等于 |
if [ $n1 -le $n2 ] |
检查 n1 是否小于等于 n2 |
less equal |
小于 |
if [ $n1 -lt $n2 ] |
检查 n1 是否小于 n2 |
less than |
不等于 |
if [ $n1 -ne $n2 ] |
检查 n1 是否不等于 n2 |
not equal |
字符串比较
功能 |
命令 |
意义 |
相同 |
if [ "$str1" = "$str2" ] |
检查 str1 是否与 str2 相同 |
不同 |
if [ "$str1" != "$str2" ] |
检查 str1 是否与 str2 不同 |
小 |
if [ "$str1" < "$str2" ] |
检查 str1 是否比 str2 小 |
大 |
if [ "$str1" > "$str2" ] |
检查 str1 是否比 str2 大 |
非 0 |
if [ -n "$str1" ] |
检查 str1 的长度是否非 0 |
为 0 |
if [ -z "$str1" ] |
检查 str1 的长度是否为 0 |
文件比较
功能 |
命令 |
意义 |
助记词 |
目录 |
if [ -d file ] |
检查 file 是否存在并是一个目录 |
directory |
存在 |
if [ -e file ] |
检查 file 是否存在 |
exist |
文件 |
if [ -f file ] |
检查 file 是否存在并是一个文件 |
file |
可读 |
if [ -r file ] |
检查 file 是否存在并可读 |
read |
非空 |
if [ -s file ] |
检查 file 是否存在并非空 |
size |
可写 |
if [ -w file ] |
检查 file 是否存在并可写 |
write |
可执行 |
if [ -x file ] |
检查 file 是否存在并可执行 |
excute |
属当前用户 |
if [ -O file ] |
检查 file 是否存在并属当前用户所有 |
Owner |
属当前组 |
if [ -G file ] |
检查 file 是否存在并且默认组与当前用户相同 |
Group |
新 |
if [ file1 -nt file2 ] |
检查 file1 是否比 file2 新 |
new than |
旧 |
if [ file1 -ot file2 ] |
检查 file1 是否比 file2 旧 |
old than |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术