Linux Bash编程笔记
这里主要记录Linux系统的默认shell Bash脚本用法.
Bash特定用法
shebang
# 脚本执行时告诉shell用哪个程序解释脚本
#!/usr/bin/env bash
#!/bin/bash
#! /bin/bash -xe
# -x 执行详细脚本, 等同于 set -x, 可用于调试目的
# -e 遇到非0错误立即退出, 等同于 set -e
重定向/管道
2>&1
# 1 代表 stdout, 2 代表 stderr.
# 2>1 可以看做重定向 stderr 到 stdout.实际上被解释为 "重定向 stderr 到文件名为 1的文件".
# & 指出接下来是一个文件描述符而不是一个文件
Bash 脚本基础
变量
# 变量赋值=周围不能包含空格
VARNAME="value"
# 单引号''保持每个字符的字面值
# 双引号""保持每个字符的字面值,除了$,``,\
# 转义字符使用\
# 显示当前日期
$(date +%Y-%m-%d)
特殊变量:
$? # 上一个命令的退出码
$$ # 当前shell进程ID
参数
- $# : 参数个数
- $0 : 文件名
- $1 : 第一个参数值
if [ $# -eq 0 ]
then
echo "no args"
else
echo "arg1 $1"
fi
操作
- $((expression)) : 算术运算
- ${#varname} : 字符串长度
#
subshell
使用(在子命令范围有效), 如临时切换目录等.
循环
while [$port -lt 1024]
do
port = 'expr $port + 1';
done
多分支选择
case "$1" in
start)
./start.sh
;;
stop)
./stop.sh
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
Bash 脚本高级
HereDoc
也许你没听过这个名字,但一定见过这个用法.
它会把开头的单词做标记,提取中间的内容作为标准输入stdin.
# 格式
<<[-]END_TEXT
here-document
END_TEXT
# 示例1
cat <<EOF
My home directory is $HOME
EOF
# 说明: 默认会解释内容中的变量符号
# 如果要保持原样,开头要加上引号'EOF'
# 如果要去掉格式中的tab符号,前面加-EOF
# 示例2,利用定向符
cat <<EOF > file
My home dir is $HOME
EOF
# 精简格式
fmt -t -w 20 <<< 'Wrap this silly sentence.'