shell脚本的使用总结

最近学习的项目里面大量使用了shell脚本,主要用来对数据进行一些预处理,因此这里进行一下总结记录。 

//运行某个脚本
chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

$0    //这个程式的执行名字
$n    //这个程式的第n个参数值,dun=1..9 ,如果n的个数超过了参数的个数,那么就是空
$*    //这个程式的所有参数,此选项参数可超过9个。
$@     //是传给脚本的所有参数的列表和上一个差不多
$#    //这个程式的参数个数

//$* 和 $@的区别
//$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。但是当它们被双引号(" ")包含时,
//"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。



#!/usr/bin/env bash  // #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo用于向向窗口输出文本。

-eq           //等于
-ne           //不等于
-gt            //大于 (greater )
-lt            //小于  (less)
-ge            //大于等于
-le            //小于等于

//查看某个目录或者某个文件是否存在
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真

//获得当前运行脚本的绝对路径
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"  //首先dirname可以返回一个文件的目录部分,然后pwd是打印输出这个绝对路径,然后就把这个脚本的绝对路径保存

//在一个函数里面可以定义一个local,局部变量
local ds_type="$1"  //这个变量的值就是第一个参数

//查看某个目录下某种类型的文件有多少个
ls *.png | wc -l   //查看当前目录下后缀为.png的文件有多少个

//wc命令用于查看文件里面有多少字节,多少行
wc [-lcmw] [file...]
-c 统计字节数。
-l 统计行数。
-m 统计字符数。如果本地不支持多字节字符,则和-c一样的效果。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。


//cat命令主要有一下几个作用
1.一次显示整个文件。$ cat filename
2.从键盘创建一个文件。$ cat > filename
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件: $cat file1 file2 > file
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
例:
把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -n textfile1 > textfile2

把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。
cat -b textfile1 textfile2 >> textfile3


//输入输出重定向
1、输出重定向
command1 > file1  //将command1命令输出的内容保存到file1,但是会将所有的旧内容都替换掉

2、以追加的方式输出重定向
command1 >> file1   //将command1命令输出的内容保存到file1,但是是以追加的方式添加,旧内容不会被覆盖

3、输入重定向
command1 < file1   //本来需要从键盘获取输入的命令会转移到文件读取内容。也就是命令是写在文件里面的

4、同时替换输入和输出
command1 < infile > outfile   //从infile文件读取命令来执行,然后将执行的输出内容保存到outfile

5、Here Document 用来将输入重定向到一个 Shell 脚本或程序,即可以执行shell脚本里面的内容
基本形式:
command << EOF
    document(内容)
EOF
//它的作用是将两个 EOF 之间的内容(document) 作为输入传递给 command。
//注:结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。
//开始的delimiter前后的空格会被忽略掉。
举个例子:
cat <<EOF
    build/DynSLAMGUI --dataset_root $DATASET_ROOT \
    --dataset_type=$DATASET_TYPE \
    --enable-evaluation=false \
    --use-dispnet
EOF

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值