由于本人对 linux 命令不是很熟悉。但是平时工作中有需要用到一些 linux 命令相关的东西,因此在这里备份自己平时经常使用的命令。
1. rm 命令:
rm -rf * :强制删除当前目录下的所有文件,包括文件夹在内的所有文件。
2. mmv 命令:
2.1. 举例:将一下文件夹的内容批量转换为 “common_image_[index].png” 格式。
文件夹文件内容:
|-test
|- image_test_01.png
|- image_test_02.png
|- image_test_03.png
使用 mmv 命令:mmv "*_test_*.png" "common_#1_#2.png"
注:意思是将第一个表达式的第一个 “*” 号对应的内容(image)将会替换第二个表达式的 “#1” 处的内容,第二个 “*” 号对应的内容(序号)将替换 “#2” 处的内容。
结果:
|-test
|- common_image_01.png
|- common_image_02.png
|- common_image_03.png
3. 在 shell 脚本中,数组的使用
定义数组:CONTENT_ARRAY=(element1 element2 element3)
循环调用:
LEN=${#CONTENT_ARRAY[*]}
for(( i=0; i<$LEN; i++))
do
CURRENT_ELEMENT="${CONTENT_ARRAY[$i]}"
echo $CURRENT_ELEMENT
done
4. grep 命令使用
1. 常用的选项说明:
1.1. -c 仅输出匹配行的计数。
1.2. -i 不区分大小写(仅适用于单字符)。
1.3. -h 查询多文件的时候,不显示文件名。
1.4. -l 查询多文件的时候,只输出包含匹配字符的文件名。
1.5. -n 显示匹配行及行号。
1.6. -s 不显示不存在或无匹配文本的错误信息。
1.7. -v 显示不包含匹配文本的所有行。
1.8. -E 使用 “或” 模式。
2. ls 命令与 grep 组合使用的例子:
2.1. ls |grep -v “*.txt”
说明:显示当前目录下除了以 "*.txt" 为结尾的所有文件的名称。
2.2. ls |grep -vE “*.txt|*.xlsx”
说明:显示当前目录下除了以 “*.txt” 或者 “*.xlsx” 为结尾的所有文件的名称。grep 命令在使用 “或” 模式的时候必须要加上 -E 选项。
5. chmod 命令使用
1. 常用选项说明:
1.1. -R 递归式地改变指定目录及其下的所有子目录和文件的访问权限。
1.2. -v 显示 chmod 命令的工作。
2. 举例:
chmod -Rv 777 *
说明:将当前目录下所有的子目录和文件添加所有的可用的访问权限。
6. shell 脚本嵌套 expect 脚本自动执行登陆校验
说明:当需要使用 rsync 将本地的文件同步至远端服务器的时候,一般需要先登陆校验,每次都登陆检验有点麻烦,可以用 expect 来自动输入密码,简化操作。
实现方式:
1. 直接在shell 脚本中嵌套 expect 脚本内容,这样所有的命令可以在一个sh 脚本文件中就可以了。
expect -c " spawn rsync -az release/release.zip admin@192.168.1.200:/mnt/d/shared/release/release.zip --progress expect "password:" send "haojidemima " interact "
2. 将 expect 脚本的内容单独写在一个.sh 文件中,然后再 shell 脚本调用。
#!/usr/bin/expect # 取传过来的参数,从 0 开始 set DIST [lindex $argv 0] set RELEASE_NAME [lindex $argv 1] spawn rsync -az ${DIST}/${RELEASE_NAME} admin@192.168.1.200:/mnt/d/shared/release/${RELEASE_NAME} --progress expect "password:" send "haojidemima " interact
上面的脚本命名为 expect_rel.sh,因此在 shell 脚本中加入以下一行代码:
# expect 脚本中需要用到两个参数,因此在后面带上即可,每个参数之间使用空格隔开即可
expect ./expect_rel.sh "release/" "release.zip"