只写一些精华的,常用的。详细的学习,见linux鸟哥私房菜。下面待整理。
一、精华例子
1、Linux统计文件夹下的文件数目 参考
Linux下有三个命令:ls、grep、wc。通过这三个命令的组合可以统计目录下文件及文件夹的个数。
统计当前目录下文件的个数(不包括目录)
$ ls -l | grep "^-" | wc -l
统计当前目录下文件的个数(包括子目录)
$ ls -lR| grep "^-" | wc -l
查看某目录下文件夹(目录)的个数(包括子目录)
$ ls -lR | grep "^d" | wc -l
2、文件以及文件夹的大小
ls -l filename # 求特定文件
du -sh # 求文件夹大小
3、拼接字符串
# 实践发现 因为all_root_raws只要一组"",它只能被for遍历。但是获取到的数组长度却是1,它不能用下表的方法遍历【但可以for data in ${lst_paths[@]} 遍历,也就是for可以拆散字符串的意思。直接$计算数量却不行。】。
all_root_raws="./eyth_dataset/images;
./hand_over_face/images_resized;
./hand2K_dataset/GTEA/Images;
./hand2K_dataset/GTEA/oldImages;
./hand2K_dataset/GTEA_GAZE_PLUS/Images;
./hand14k/Images;
./parsing_palm_v1/parsing_palm_jpg
"
root_raws_str=""
for i in $all_root_raws
do
root_raws_str="$root_raws_str$i"
done
echo $root_raws_str
4、字符串的替换 参考
s1="/hand_segment"
s2="/media/private/hand_segment"
server_root="/hand_segment/fg_4_48/model_for_test"
local_path=${server_root/$s1/$s2} # 输出 /media/private/hand_segment/fg_4_48/model_for_test
5、实现range()函数功能 参考
startDatasetIndex=1
endDatasetIndex=3
# seq命令用于产生从某个数到另外一个数之间的所有整数。
for i in $(seq $startDatasetIndex $endDatasetIndex)
do
echo $i # 输出 1 2 3
done
6、遍历数据 参考1 参考2-根据下标获取元素
lst_paths=(
'/hand_segment/dataset/lst_and_rec/GTEA_train1.lst'
'/hand_segment/dataset/lst_and_rec/GTEA_train2.lst'
'/hand_segment/dataset/lst_and_rec/GTEA_train3.lst'
)
for data in ${lst_paths[@]} # 一定要带[@],否则只能获取第一个元素。
do
echo ${data} # 依次输出上面lst_paths的每一个元素。
done
二、基本语法
1、exit 0:推出脚本
2、#!/bin/bash 意思表示:接下来的这段是bash脚本程序,用系统中bin目录下的bash程序来执行。
3、获取当前脚本文件路径:
path=$(dirname $(readlink -f "$0")) #或者
path2=$(cd "$(dirname "$0")";pwd)
1、井号# 注释。也有删除的用法,但是用得少,见参考2。
2、分号; 可以在同一行上写两个或两个以上的命令
例子:
cd /data2/segmentation_hand_frame;for f in $(find . -name "*.jpg" -print); do echo "[]" > ${f/jpg/pd};done
3、点号. 等价于 source 命令
4、反引号` 命令替换,反引号中的命令会优先执行,如:cp `mkdir back` test.sh back
5、美元符号$ 以下两处用法
(1)变量替换
var1=5
echo $var1 # 5
(2)命令替换(同反引号)
$ cd $(echo Documents)
花括号{} 扩展。例子 rm {main,temp,test}.c
5、特殊变量
PATH:系统的环境变量。例子 echo ${PATH}
6、find命令
参考
常用参数:
-print 将匹配的文件输出到标准输出。这是命令参数,后面不需要接内容。命令选项才需要接内容。
-name 按照文件名查找文件。
例子:
$(find . -name "*.jpg" -print) # 寻找
7、字符串操作(长度,查找,替换)
参考
基本格式:${string/substring/replacement} # 使用$replacement, 来代替第一个匹配的$substring
例子:
for f in $(find . -name "*.jpg" -print); do echo "[]" > ${f/jpg/pd};done # f是遍历得到的文件名字,然后把jpg后缀换成pd。
8、Linux sh、source和.命令执行.sh文件的区别
参考1 参考2
它们是有区别的,通常使用 ./ 就好了。
./a.sh会用你脚本中第一行的那个#!XXX的shell来执行语句
而sh a.sh则是用sh来执行语句