本文是最常用、最基础的Linux Shell命令纪录,可用于查阅
注意
- 定义变量时”=”两边不能有空格
- 条件测试语句”[“符号两边都要留空格
- 条件测试的内容,如果是字符串比较的话,比较符号两边都要有空格
示例
第一行
#! /bin/bash
,表示该脚本采用的bash语法。如果不设置改行则脚本可能不会被执行。#! /bin/bash echo "ts" >> /home/cdh/yangjunqiang/weibo/error.log 2>&1
将sh脚本添加执行权限,就可以直接
./filename
执行脚本chomd a+x filename
查看脚本的执行过程,便于脚本的调试
sh -x filename
常用命令
date 打印当前系统时间
date "+%Y%m%d %H:%M:%S" date "+%y%m%d" #-d 可以实现对时间的加减 date -d "-1 day" "+%Y%m%d" date -d "-1 month" "+%Y%m%d" #星期几 date +%w #获取昨天的日期 date_=$(date -d "-1 day" "+%Y-%m-%d") #获取十二小时之前的时间 time_=$(date -d "12 hour ago" "+%H:%M:%S")
awk
类似Java split分隔文本,默认是以空格分隔,
$1...$n
是指分隔之后的域,从1开始,$0
表示所有的域
print $0
表示输出所有的域//-F指定分隔符,不指定的话默认是空格 awk -F":" '{print $1}'
grep
grep -v 反向选择,显示出没有指定字符的结果
grep -v grep //排除带grep的命令#! /bin/bash #获取运行的Java process pid,排除grep自身的pid #先筛选包含java的结果,再筛选结果里里包含 "java -jar"的process pid=$(ps -ef | grep "java" | grep 'java -jar' | grep -v grep | awk '{print $2}') echo $pid
重定向:将结果输出到文件,而不是标准输出到屏幕
>
:写入文件并覆盖原有内容
>>
:在原文件的末尾继续写入,不会覆盖原有内容管道(|):将一个命令的输出作为另一个命令的输入
//在hello.txt文件里搜索包含hello的行并计数 grep "hello" hello.txt | wc -l
变量
变量的引用需要加上”$”,最好都跟上
{}
read x 手动输入,从终端获取输入的值
n 脚本的预设变量,可以在脚本运行时跟上作为参数
sh test.sh 1 2 //1就是$1的值 2是$2的值
$# 传递给脚本的参数个数
$0 脚本本身的名字
$@ 传递给脚本的所有参数的列表
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID
$! shell最后运行的后台process的PID
$? 显示最后命令的退出状态,0表示没有错误,其他表示有错误
#! /bin/bash #测试变量sh echo "number:$#" echo "scname:$0" echo "first :$1" echo "second:$2" echo "argume:$@" echo "show parm list:$*" echo "show process id:$$" echo "show precomm stat: $?"
判断参数个数
if [ $# -gt 0 ];then
echo "参数个数为$#"
fi
判断语句
if ((a>10)) ; then
echo "这里是代码段"
elif ((a>2)) ; then
echo "注意(()),这是一种格式"
else
echo "else代码段"
fi
- 整数比较:还可以使用
[ ]
。但是就不能使用>, < , =,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)。 - 字符串比较:
==
或者=
- 判断字符串是否非空:
if [ -n "${String}" ]
不为空为true 注意加双引号
判断档案属性
-e :判断文件或目录是否存在
-d :判断是不是目录,并是否存在
-f :判断是否是普通文件,并存在
-r :判断文档是否有读权限
-w :判断是否有写权限
-x :判断是否可执行
if [ -e filename ] ; then
case语句
case $a in
0)
echo "a=0"
;;
1)
echo "a=1"
;;
循环语句
for循环
for i in `seq 1 5`; do
echo $i
done
while循环
#! /bin/bash
a=10
while [ $a -ge 1 ];do
echo "$a"
a=$[$a-1]
done
#循环条件可以忽略掉
while :; do
ehco "没有条件的while"
done
字符串操作
字符换拼接
back_name=${BACKTIME}"_"${db_name}