linux bash脚本初学

本文大部分资料来自: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)

 

 

你可能感兴趣的:(C++)