常用命令介绍
历史命令(History)
history:查看历史命令,默认1k条 !!:上一条命令 !$:获取上一条命令的最后一个参数 !+数字:运行第几条历史命令 !+字符串:从历史命令最近一条开始匹配,以该字符串开头的命令
别名(alias)
列出所有的别名设置:alias 设置别名:alias a=’b’ 取消别名设置:unalias a
重定向
重定向符号
重定向,覆盖原来的内容:> 重定向,追加到原来的内容:>> 反向重定向,目标是一个程序:< 错误重定向,覆盖原来的内容:2> 错误重定向,追加到原来的内容:2>> 错误重定向到标准输出:2>&1
//执行结果输出到1 .log ,错误信息输出到2 .log
sh test.sh > 1 .log 2 >2 .log
//效果等同于:sh test.sh > 1 .log 2 >1 .log
sh test.sh > 1 .log 2 >&1
//错误信息追加到1 .log
sh test.sh >> 1 .log 2 >>&1
快速清空文件内容
: > filename 或者 > filename echo “” > filename 或者 echo > filename (cat打印会有一个空行)echo -n “” > filename (去除空行)cat /dev/null > filename truncate -s 0 filename
任务
暂停任务:ctrl+z 停止任务(前台执行的):ctrl+c 查看后台运行的任务:jobs 后台执行任务
filename & (Shell关闭后任务会停止)nohup filename & (Shell关闭后任务继续执行)setsid filename (Shell关闭后任务继续执行) 前台继续执行暂停的任务:fg job_id 后台继续执行暂停的任务:bg job_id 终止后台执行的任务:kill %job_id 或者kill pid
管道
cat filename| cut -d ':' -f 2 - 4
cat filename| cut -c 10
匹配命令:grep
统计匹配到的行数:-c 显示行号:-n 忽略大小写:-i 反向输出:-v 颜色显示:–color=auto
cat filename| grep -n -- color= auto 'home'
grep -E "aaa|bbb|ccc"
排序命令:sort
忽略大小写:-f 数字排序:-n 不显示重复行:-u 指定分隔符:-t 指定根据排序的段:-k (与-t一起使用) 反向排序:-r
cat filename| sort -t ':' -k 3
不显示重复行:uniq [-ic] 统计数据:wc [-lwm]
cat filename|wc -l
cat filename|tee 1 .log
cat filename|tr '[a-z]' '[A-Z]'
ls|xargs
Shell正则
grep/egrep
符号匹配:
匹配零个及以上的字符:ro*t 匹配任意的一个字符:ro.t 匹配零个或者一个字符:ro?t (与-E一起使用) 匹配一个或者多个字符:ro+t (与-E一起使用) 贪婪模式,匹配所有:.*
sed 查找替换
sed '1p' -n 1. txt
grep -n '.*' 1. txt | sed '5,$p' -n
grep -n '.*' 1. txt | sed '/root/p' -n
grep -n '.*' 1. txt | sed -r '/ro?t/p' -n
grep -n '.*' 1. txt | sed -e '/root/p' -e '/mysql/p' -n
grep -n '.*' 1. txt | sed '5,$d'
grep -n '.*' 1. txt | sed 's/root/toor/g'
grep -n '.*' 1. txt | sed 's/[0-9]//g'
grep -n '.*' 1. txt | sed 's/[^0-9]//g'
sed -i
awk
awk -F ':' '{print $2}' 1. txt
awk -F ':' '$1~/root/' 1. txt
awk -F ':' '$1~/root/ {OFS="#";print $1,$2}' 1. txt
awk -F ':' '$1=="root" {print $1,$2}' 1. txt
awk -F ':' '$1=="root" || NR>30 {print $1,$2}' 1. txt (或者行号大于30 )
awk -F ':' '$1=="root" && NR>30 {print $1,$2}' 1. txt (并且行号大于30 )
awk -F ':' '$1=$3+$4 {print}' 1. txt
awk -F ':' 'NF>3 && NF<10 {print $1,$2}' 1. txt
Shell脚本编程
脚本第一行:#!/bin/bash 注释符号:# 查看脚本执行过程,用于调试使用:bash/sh -x filename
date
date +%Y
date +%y
date +%m
date +%d
date +%H
date +%M
date +%S
date +%s
date -d @100
date +"%F %T"
date +%w
date +%W
date -d "-1 day" +"%F %T"
变量
输出系统内置变量:env 变量设置/取消
set wc=”“cat filename|wc -l unset wc set (打印所有变量) 声明变量:export MY_HOME=/home/user (可以在子shell中使用) 系统的变量:/etc/profile 和 /etc/bashrc 用户的变量:~/.bashrc 和 ~/.bash_profile 命令提示符:PS1
//[ root@wangs ~ ] # 用户名,主机名,目录
echo $PS1
[ \u @\h \W ] \$
变量赋值:a=”home/user/hadoop/hive/bin/hive” 命令执行结果赋值给变量:dir=which hadoop
脚本中读取输入:read -p “请输入一个数字:” n 内置变量(保存读取的输入数据):$REPLAY 获取变量参数
获取当前脚本的文件名:$0 获取参数:$n (n表示第几个参数) 获取参数个数:$# 获取所有参数:$* 获取上个命令的退出状态:$? 当前Shell的pid:$$
运算
a =1
let c=a +b
//空格不能少!
c=`e xpr $a + $b`
c=$((a +b))
c=$[$a +$b]
逻辑判断
if [ xxx ]
then xxx
elif [ xxx ]
then xxx
else
xxx
fi
case "$1 " in :
start)
xxx
;;
stop)
xxx
;;
*)
xxx
;;
esac
比较符号:–gt >;-ge >=;-lt <;-le <=;-eq ==;-ne !=
if [ $a -lt 3 ]; then echo ok;else echo nook; fi
if (($a >3 )); then echo ok;else echo nook; fi
if [ $a -lt 10 ] && [ $a -gt 3 ]; then echo ok; fi
if [ $a -lt 10 ] || [ $a -gt 3 ]; then echo ok; fi
//等价于&&
if [ $a -lt 10 -a $a -gt 3 ]; then echo ok; fi
//等价于||
if [ $a -lt 10 -o $a -gt 3 ]; then echo ok; fi
判断是否存在:-e;-f ;-d ;-r;-x;-w
if [ -e file/dir ]; then echo "exist" ; fi
//取反操作
if [ ! -e file/dir ]; then echo "not exist" ;
//简单判断并输出
[ -f file ] && echo "exist"
[ -f file ] || echo "exist" 取反操作
if [ -z $n ]
循环
//从1 到100 ,步长为2 ,步长可以为负数
for i in {1 ..100 ..2 }
do
echo $i
done
while :
do
sleep(2 )
echo `date +"%F %T" `
done
函数
sum() {
s=$[ $1 +$2 ]
return $s
sum 1 2