SHELL(1)-基础


1、SHELL由来;

LINUX严格意义上说是一个操作系统(OS, Opertating System),使用者没有办法和Kernel交互,Shell是使用者和系统交互的Interface,只能通过命令行 Command Line;shell最简单的定义就是 命令解译器(Command Interpreter);负责将用户指令翻译给内核处理,并将内核处理的结果返回给用户。

2、SHELL执行过程;

Shell 会依据 IFS(Internal Field Seperator)将 Command line 所输入的文字拆解为”字段”(word/field)。然后再针对特殊字符(meta)先作处理,最后重组整行command line。

3、exec和source却别;

# 当前shell创建子进程,执行脚本
./1.sh
# 在当前shell中执行
source 1.sh
# 在当前shell执行后退出
exec 1.sh

4、()与{}却别;

()  将括号内的 command group 置于 sub-shell 执行;

{}  在本shell内完成命令执行;

5、$@与$*区别;

“$@”  则可得到 “p1” “p2 p3” “p4” 这三个不同的词段;

“$*”  则可得到 “p1 p2 p3 p4” 这一整串单一的词段;

6、标准输入、标准输出、错误输出;

0: Standard Input(STDIN)
1: Standard Output (STDOUT)
2: Standard Error Output(STDERR)

错误输出和标准输出重定向合并:2>&1

7、if和case;

# if
echo -n "Do you want to continue?(Yes/No):"
read YN
if [ "$YN"=Y -o "$YN"=y -o "$YN"="Yes" -o "$YN"="yes" -o "$YN"="YES"];then
echo "continue"
else
exit 0
fi

# case
echo -n "Do you want to continue?(Yes/No):"
read YN
case "$YN" in
[Yy]|[Yy][Ee][Ss])
echo "continue"
;;
*)
exit 0
esac

8、for 、while、until语句;

# for
for ((i=1;i<=10;i++))
do
echo "num is $i"
done

# while
num=1
while [ "$num" -le 10 ]; do
echo "num is $num"
num=$(($num + 1))
done

# until
num=1
until [ "$num" -gt 10 ]; do
echo "num is $num"
num=$(($nu + 1))
done

break 是结束 loop

return 是结束 function

exit 是结束 script/shell

9、注意测试 [] 和 [[]]区别;

~]# [ 3 > 2 ] && echo 123
123
~]# [ 3 < 2 ] && echo 123
123
~]# [ 3 < 2 ] && echo 123
123
~]# [[ 3 < 2 ]] && echo 123
~]# [[ 3 > 2 ]] && echo 123
123
~]# [ 3 -gt 2 ] && echo 123
123
~]# [ 3 -lt 2 ] && echo 123

使用比较符号的情况下建议使用 [[]];

使用字母表达时 可以使用 [];

10、注意逻辑运算中 &&、|| 支持短路运算;

11、$(( ))是用来做整数运算;

~]# echo $((3 + 3 * 6))

12、bash数组相关操作;

定义数组::A=(a b c d)
引用数组::${A[@]}  或 ${A[*]}
访问数组成员: ${A[0]}
计算数组长度:${#A[@]} 或 ${#A[*]}
数组重新赋值:A[2]=z

13、bash调试选项;

bash -n SHELLNAME  #语法测试,测试是否存在语法错误;

bash -x SHELLNAME  #模拟单步执行,显示每一步执行过程;

参考资料:https://mp.weixin.qq.com/s/SfwpnjzF8zViGXTYsJPs8A