0%

bash常用命令

本文记录工作中常用的bash命令,忘性大,在此记录。

文件操作

  • 文件夹不存在则创建
1
2
3
4
5
path=/mnt/datasets/kitti/

if [ ! -d ${path} ]; then
mkdir -p ${path} #创建目录及其子目录
fi

其中-d表示文件比较符,判断文件夹是否存在

  • 判断文件是否存在,若存在,则删除
1
2
3
4
5
6
7
8
file_path=/mnt/datasets/kitti/data.csv

if [ ! -f ${file_path} ]; then
echo "file not exists..."
else
echo "file exists, delete it!"
rm -f ${file_path}
fi

其中-f表示文件比较符,判断文件是否存在

以下列举常用的文件比较符:

1
2
3
4
5
6
7
8
9
10
11
12
13
-e 判断对象是否存在
-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新 [ "/data/file1" -nt "/data/file2" ]
-ot 判断file1是否比file2旧 [ "/data/file1" -ot "/data/file2" ]

循环

bash中定义数组的语法

1
variable=(arg1 arg2 arg3 ....)

获取下标为n的元素

1
variable[n]

而且不存在数组下标溢出的情况,如果 n>= 数组的长度,那么为空,不会报错。

获取数组长度

1
${#variable[@]}

或者

1
${#variable[*]}

遍历的两种方式

1
2
3
for i in ${variable[@]}; do
#do something
done

或者

1
2
3
4
for i in $(seq 0 ${#variable[@]}); do
e=${variable[$i]}
# do something....
done

以上两种方法 把 @ 换成 * 也行。

参考

  1. Shell脚本数组操作小结1
  2. Shell脚本数组用法小结2
  3. linux shell 中数组的定义和for循环遍历的方法
  4. Shell中创建序列和数组(list、array)的方法