本文大部分资料来自:https://my.oschina.net/FEEDFACF/blog/1789695
这个语言的学习感觉学到后面很难去实现一些比较大型的任务,目前学的也很浅,先发一下所有的知识点总结。
顺便吐槽,这些东西是真难记啊~~~
比较符 描述
n1 -eq n2 检查n1是否与n2相等
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于或等于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查n1是否不等于n2
字符串
比较符 描述
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0
文件比较
比较符 描述
-d file 检查file是否存在并是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并是一个文件
-r file 检查file是否存在并可读
-s file 检查file是否存在并非空
-w file 检查file是否存在并可写
-x file 检查file是否存在并可执行
-O file 检查file是否存在并属当前用户所有
-G file 检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧
数组
array[$count]=$line 把内容保存到数组
${#array[@]} 获取数组的元素个数
tmp=${array[i]}; 读取数组第i个元素
方法的参数
参数的获取使用$1,$2以此类推,特别地$0表示文件名、$#表示参数的个数
文件的读取可以使用cat命令结合for in循环处理
注意:$IFS是文件循环处理的分隔符,按按行处理数据需要把该值设置为$'\n',处理完成之后恢复旧值
文件写入
使用输出重定向把内容输出到文件
>输出重定向符号先清空文件然后把内容写入到文件中
>>输出重定向符号把内容追加写入到文件中
此外可以结合其他命令实现排序、去重功能
sort命令对文件内容以行作为单位排序
uniq命令对文件内容进行去重,以行为单位,一般需要结合sort命令使用
sed流编辑
Sed流编辑结合正则表达式可以方便的对文本文件进行查询、修改、删除、增加等操作
注意:osx系统自带的sed命令和标准的gnu-sed使用方式上有些差别,所以以下篇幅所谈论到的sed都是标准的gnu-sed,
下面的这个脚本用于判断系统是否安装了gnu-sed,如果没有会自动进行安装,完成之后需要用户执行显示的命令配置下即可。
首先是学每个语言都必要的9*9乘法表,两种写法,感觉bash很多东西都是要记住细节,比较麻烦,但是代码应该挺容易懂的。
echo "9*9====="
i=1
j=1
line=""
for((int i=1;i<=9;i++));do
for((int j=1;j<=i;j++));do
result=$[ $i * $j ]
resultStr="$i x $j = $result"
line=${line}${resultStr}"\t"
done
echo -e ${line}
done
while [[ i -lt 10 ]]; do
j=1
line=""
while [[ j -lt 10 ]]; do
if [[ j -le i ]]; then
result=$[ $i * $j ]
resultStr="$i x $j = $result"
line=${line}${resultStr}"\t"
fi
j=$[ $j + 1 ]
done
echo -e ${line}
i=$[ $i + 1 ]
done
函数的简单写法,其实就是要明白传参和接收参数的方法。
checkDirCore()
{
cnt=$1 #当前文件名
message=$2
echo "scriptname=${0} paramscount=${#}"
if [[ -d $cnt ]]; then
echo "mu lu exist $cnt"
flag=$cnt
else
echo "${message} ${cnt}"
fla ${cnt}
fi
}
echo $(pwd)
checkDirCore $(pwd) "指定类的查找目录不存在" "hi"
dir=${flag}
echo "dir = ${dir}"
read()
{
if [[ -d $1 ]]; then
for item in $(ls $1); do
itempath="$1/${item}"
if [[ -d $itempath ]]; then
echo "处理目录 ${itempath}"
read ${itempath}
else
echo "处理文件 ${itempath}"
fi
done
else
echo "error:not a same mulu"
fi
}
read $(pwd)