变量 1 2 3 4 5 6 7 name=lzh names=(1 2 3 4) echo ${name} echo ${names} echo $1 echo $@ echo $*
字符串 1 2 3 4 5 6 str=lzh str="lzh ${str} " "haha" echo ${#str} echo ${str:1:3}
数组 1 2 3 4 names=(1 2 3 4) echo ${names[1]} echo ${names[@]} 所有数组元素echo ${#names[@]} 数组长度
流程控制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 if [[ $1 > 10]] then echo "参数大于10" fi for file in $@ do if [[ -e ${file} ]] then rm -rf ${file} else echo "${file} not exis" fi done a=100 while (($a > 0)) do echo ${a} done # while循环可用于读取键盘信息 while read file do if [[ -e ${file} ]] then rm -rf ${file} else echo "${file} not exis" fi done # 无限循环 wihle : do done while true do done for ((;;)) # case name=$1 case ${name} in 1) echo 1 ;; 2) echo 2 ;; 3) echo 3 ;; *) echo "不在1-3" esac
test 命令 1 2 3 4 if test -f ./env.sh then echo 1 fi
1 2 3 4 5 6 7 -d 文件夹 -f 文件 -r 可读 -w 可写 -x 可执行 -e 检测文件(包括目录)是否存在 -s 文件是否为空
1 2 3 4 5 6 if [[ -f ./env.sh ]]then echo "文件存在" else echo "文件不存在" fi
函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 hello(){ for name in $@ do echo "hello ${name}" done } hello $@ # 带返回值的函数 add(){ return `expr $1 + 2` } add 1 echo $? # 函数返回值在调用该函数后通过 $? 来获得
重定向 1 2 3 4 echo 1 > 1.md # 以覆盖的方式重定向 echo 2 >> 2.md # 以追加的方式重定向 wc -l < 1.md # 键盘获取输入的命令会转移到文件读取内容
1 2 3 4 5 6 7 8 9 10 11 # here document 用来将输入重定向到一个交互式 Shell 脚本或程序。 wc -l << EOF 213 bd dasf as dasf EOF # 结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符 # 包括空格和 tab 缩进。 # 开始的delimiter前后的空格会被忽略掉。
脚本中执行另一个脚本 1 2 . ./env.sh source ./env.sh
需要注意路径,路径为脚本执行的时候路径
常用命令 1 2 3 4 5 6 7 8 #获取当前命令的绝对路径 basePath=$(cd `dirname $0`; pwd) # 清空文件 > filename echo "" >filename : > filename cat /dev/null > filename
grep grep
全称为 Global Regular Expression Print
主要还是查看文档 grep --help
1 2 3 4 5 6 7 8 grep ltinyho test.md -i 忽略大小写 -r或-R 递归查找目录 -w 查找单词 -v 匹配所有不满足的条件
ps ps
命令是Process Status
的缩写
1 2 3 4 -A 或者 -e 全部进程 e 显示环境变量 f 显示程序之间的关系
netstat 1 2 3 4 5 6 7 netstat -nlput -n 显示网络地址 -l 监听的端口 -p pid -u udp -t tcp
sed (steam editor) 使用数据流重导向,不修改源文件
1 2 3 4 5 6 7 8 nl test.md | sed '3,$d' nl test.md | sed "s/ltinyho/haha/g" > new.mdnl test.md | sed "/ltinyho/p" nl test.md | sed "/ltinyho/d"
awk awk工作流程是这样的:读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。 默认域分隔符是”空白键” 或 “[tab]键”.
1 2 3 4 last -n 100 last -n 100 | awk '{print $3}'
crontab 定时任务 通过 crontab
可以在固定时间间隔执行shell script
.
查看 crontab 日志
重新启动 sudo service cron restart
1 2 3 4 5 6 7 8 9 10 * * * * * ~/shell/echo.sh >> $HOME /log/crontab/log.log 2>&1 0,15,30,45 18-6 * * * 0,30 8-11 */2 * *
其他注意事项 新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。 注意环境变量问题,有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。