shell的特殊位置变量
$0       相当于C语言main函数的argv[0]
$1 $2 $3....位置参数,相当于argv[1],argv[2],argv[3]
$#       脚本运行时携带的参数个数
$@      表示参数列表(可以用做for的遍历)
$*        表示参数列表
$?       上一条命令的exit status(0为真  非0为假)
$$       当前进程号
IFS环境变量定义了shell用作字段分隔符的一系列字符

取变量或者字符串的长度
echo $a|wc -L 利用wc的-L参数来获取字符串的长度 对多行文件来说,表示打印最长行的长度 对单行字符串而言,表示当前行字符串的长度
echo ${#a}
awk '{print length($0)}'
awk -F"" '{print NF}'
echo -n "" | wc -c
-c参数: 统计字符的个数
-n参数: 去除"\n"换行符,不去除的话,默认带换行符,字符个数就成了7
expr length "$str"

点执行与source sh bash执行脚本区别
https://www.jb51.net/article/128918.htm
结论一: ./.sh的执行方式等价于sh ./.sh或者bash ./*.sh,此三种执行脚本的方式都是重新启动一个子shell,在子shell中执行此脚本。

结论二: .source ./.sh和 . ./.sh的执行方式是等价的,即两种执行方式都是在当前shell进程中执行此脚本,而不是重新启动一个shell 而在子shell进程中执行此脚本。

如何进行整数的计算
(()) 用于整数之间常用的运算符,效率高
let :用于整数运算,类似于(())
expr :用于整数运算,但是还有其他功能
bc :Linux下的一个计算程序,适合整数及小数运算
$[] :用于整数运算
awk:awk既可以整数运算,也可以小数运算
declare: 定义变量值和属性,-i参数可以用于定义×××变量,做运算

单双引号与不加引号的区别
单引号与双引号的最大不同在于双引号仍然可以保有变数的内容,但单引号内仅能是一般字元,而不会有特殊符号