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