文件
1. 将目录下的文件复制到另一个目录下
如果 dir2 目录不存在
cp -r dir1 dir2
如果dir2目录已存在,则需要使用,否则会将 dir1 目录复制到 dir2 中
cp -r dir1/. dir2
2. 批量移动文件/目录到目录下
mv a.dir 2.txt -t dir
3. 递归修改目录权限(子目录、文件)
chmod -R 777 dir
4. 读写
读取文件
cat a.txt
输出文本
echo "something"
写入(覆盖)文件
echo "something" > a.txt
写入(追加)文件
echo "something" >> a.txt
5. 换行符修改
设置文件格式为 unix 类型,即换行符为 \n。
ff还可以设置为 dos(换行符为 \r\n) mac(换行为 \r)
set ff=unix
6. 脚本所在目录路径
设置文件格式为 unix 类型,即换行符为 \n。
ff还可以设置为 dos(换行符为 \r\n) mac(换行为 \r)
$0 # 脚本所在路径
# dirname 输出路径可能绝对,也可能相对
dirname /usr/bin/something # 输出 /usr/bin
dirname config.log # 输出 .
# 获取脚本所在目录路径
SHELL_FOLDER=$(dirname "$0")
# 获取脚本所在目录绝对路径
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
时间、随机数
日期
date
# Thu Dec 10 14:29:31 CST 2020
时间戳
date +%s
# 1607581759
格式化日期
date "+%Y-%m-%d %H:%M:%S"
# 2020-12-10 14:32:31
随机数
echo $RANDOM
# 2020-12-10 14:32:31
字符串
1、拼接
#!/bin/bash
foo="asd"
bar="reheh"
str1=$foo$bar #多个变量直接拼接,简单粗暴
str2=$foo": "$bar #字符串也是直接拼接
str3="$foo: $bar" #双引号也可以统一包裹在最外层
str4="${foo}some str, ${bar}blablabla" #给变量名加上大括号,以示变量名边界
echo $str1
echo $str2
echo $str3
echo $str4
函数
参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
#!/bin/bash
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
输出结果:
第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
进程
1. 后台不挂断地执行进程
nohup:不挂断地运行命令
&:在后台运行
一般两个一起用:
nohup command &
2. 查找进程
ps -def | grep <command>
3. 杀死进程
kill <pid>