shell基础知识

本文整理自我多年前读Advanced Bash-Scripting Guide一书的笔记

特殊字符

#

echo "#这里不是注释"
echo '#这里不是注释'
echo \#这里不是注释
echo #这里不是注释

;

if [ -z $1 ]; then
    echo "-->must with paramether 'start' or 'stop'"
elif [ $1 == "start" ]; then
    echo "starting..."
    sudo systemctl start smbd nmbd
    echo "done!"
elif [ $1 == "stop" ]; then
    echo "stoping..."
    sudo systemctl stop smbd nmbd
    echo "done!"
else
    echo "-->error parameter!"
fi

上面的分号就是用于分隔前面的判断和后面的then,分号后面最好加个空格,好区别一点。

;;

case "$1" in
    "abc") echo "\$1 = abc" ;;
    "xyz") echo "\$1 = xyz" ;;
esac    

我发现了规律,因为if的结束是fi,因此我猜其它的也是这个规律。

.

总是要source一下才会使配置生效,今天看了这本书,才发现,原来source就相当于C语言中 的#include指令,用于给脚本包含一个文件。

" and '

,

let "t = ((a = 9, 15 / 3))"

`

得到的是执行command这个命令之后的结果,它的英文名是backquote或者backtick

:

while :
do
    echo "wow"
done

相当于

while true
do
    echo "wow"
done
:
echo $?

结果是:

0
if condition
then 
    :
else
    ...
fi
: ${username=`whoami`}
echo $username

这里,如果不用 : ,则后面拿到的用户名会当作命令来用。

!

*

#!/bin/bash

shopt -s globstar

for file in **
do
    echo $file
done    

但是,需要开启globstar,因为这个是bash 4里面的新加的功能。

?

a=1
b=2
((min = $a < $b ? $a : $b))
echo $min       

$

()

a=123
(a=321;)
echo $a

结果为:

123

{}

a=123
{ a=321; }
echo $a

结果为:

321

注意{}里面要加空格。

> and &> >& and >>

控制字符

Ctrl-c

Ctrl-d

Ctrl-h

Ctrl-L

Ctrl-t

Ctrl-u