Bash / Shell 脚本

只写一些精华的,常用的。详细的学习,见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)

4、特殊符号常用的摘录 参考
参考2

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     # 52)命令替换(同反引号)
$ 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来执行语句

猜你喜欢

转载自blog.csdn.net/qimiejia5584/article/details/80449049
今日推荐