Bash 编程笔记

                     

贡献者: addis

  • 本文处于草稿阶段。

1. 基础

关于引号

2. pipe

3. 判断

echo 123;
if [ $? -ne 0 ]; then # 判断 exit status
...
fi

# 判断路径是否存在(感叹号后面一定要有空格)
if ! [ -d "$repo" ]; then
    echo "directory not found!" 1>&2
fi

# 判断文件是否存在且不是文件夹或者特殊文件
if ! [ -f "$fname" ]; then
    echo "file not found!" 1>&2
fi

# 判断相等
if [ $i -eq 3 ]
    ...
elif [ $i -ne 3 ]
    ...
fi

双方括号判断

   双方括号不属于 POSIX 标准而是 bash 和 zsh 等特有的。语法更为现代

4. 循环

#!/bin/bash
for ((i = 1; i < 5; ++i))
# for i in {1,2,3,4} # 等效
# for i in 1 2 3 4 # 等效
do
	printf "\nfile${i}.txt\n"
done
如果在 printf 语句后面加上 && break,当前者失败时就会跳出循环。

   另外 continue 也可以跳出循环

   在当前目录中所有子目录循环

for d in */ ; do
    d=${d%/} # 删除目录名最后的斜杠
    echo "$d" # 打印所有子目录名
done
文件循环
for file in *; do
    if [ -f "$file" ]; then
        echo "$file"
    fi
done

5. 数组

#!/bin/bash
arr=(1 3 hello 13)
for ((i=0;i<4;++i))
do
    printf "arr[${i}] = ${arr[i]}\n"
done

6. 输入

   例子

#!/bin/bash
# 确保文件最后有两个空格
# use `find . -type f -name "*.matt" -exec ./convert_matt.sh {} \;`
# to convert subfolder
file=${1}
printf "${file}... "
c2=$(tail -c 2 ${file})
if [ "${c2}" == "  " ]
then
	printf "already in new format\n"
else
	printf "  " >> ${file}
	printf "done\n"
fi

7. 特殊变量

8. 函数

   $0 是调用脚本的命令(也就是 argv[0])。$# 可以查看 args 的总个数

   一个用于确保执行成功的函数:

check_failure() {
    if [ $1 -ne 0 ]; then
        echo "Error! Exiting..."
        exit 1
    fi
}

cmd1 arg1 && cmd2 arg2
check_failure $?

9. 获取系统信息


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利