Linux Bash笔记

Linux Bash笔记

这里主要记录Linux系统的默认shell Bash用法.

快捷键

当前命令编辑

Ctrl + A : 光标移到开头
Ctrl + E : 光标移到结尾
Ctrl + U : 删除整行
Ctrl + W : 删除前一个单词

历史命令

Ctrl + R : 历史命令查找
^old^new : 替换上一个命令字符串
sudo !! : sudo执行上一个命令

Alt + . : 打印上一个命令的最后参数
!$ : 特殊变量,代表上一个命令的最后参数

目录切换

cd – : 切换到上一个工作目录
cd ~ : 切换到Home目录

Bash特定用法

环境变量

# Linux
vi ~/.bash_profile
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
# Mac
vi /etc/paths

shebang

#!/bin/bash
# 脚本执行时告诉shell用哪个程序解释脚本

重定向/管道


2>&1
# 1 代表 stdout, 2 代表 stderr.
# 2>1 可以看做重定向 stderr 到 stdout.实际上被解释为 "重定向 stderr 到文件名为 1的文件". 
# & 指出接下来是一个文件描述符而不是一个文件

制作包含二进制数据的安装脚本

参考1/2

Bash 脚本

# 调试
set -x
# 出错后退出
set -e

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

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.'

Troubleshooting

tab 不能自动补全?

sudo dpkg-reconfigure dash 选择no (原因: 默认创建的新用户使用的dash)

sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory

:set ff=unix

资源

发表评论

电子邮件地址不会被公开。 必填项已用*标注