shell常用命令

shell中字符串

- 字符串可以用单引号,也可以用双引号,也可以不用引号
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)
- 双引号里可以有变量
- 双引号里可以出现转义字符

建立软硬链接

ln [参数] [源文件] [目标文件]

软链接:
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以 跨文件系统 ,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接

硬链接:
1.硬链接,以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建

# 给文件创建软链接,为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效:
ln -s log2013.log link2013

# 文件创建硬链接,为log2013.log创建硬链接ln2013,log2013.log与ln2013的各项属性相同
ln log2013.log ln2013

echo

# 用于字符串的输出
echo string

echo "It is a test" 或者
echo It is a test

# 显示变量
#!/bin/sh
read name 
echo "$name It is a test"

# 显示换行
echo -e "OK! \n" # -e 开启转义
echo "It is a test"

#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"

# 显示结果定向至文件,会覆盖原有文件内容
echo "It is a test" > myfile

# 内容追加到文件末尾  换行追加
echo "It is a test" >> myfile

# 显示命令执行结果
echo `date`

tail

tail [参数] [文件]  
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

# 默认显示最后 10 行
tail notes.log         

# 跟踪名为 notes.log 的文件的增长情况
tail -f notes.log

# 显示文件 notes.log 的内容,从第 20 行至文件末尾:
tail -n +20 notes.log

less

less aa.log
-N  显示每行的行号 + 回车

# 可以使用ctrl组合,也可以直接使用U D B F
ctrl + U - 向后移动半屏
ctrl + D - 向前移动半屏
ctrl + B - 向后移动一屏
ctrl + F - 向前移动一屏
Z 向下移动一屏

G - 移动到最后一行
g - 移动到第一行

less aa.log后输入 
/xxx:向下搜索“xxx”的功能
?xxx:向上搜索“xxx”的功能

# 搜索多个条件
/xxx|xxx

# 进入less后跳转到哪行
:行号g

n 向前显示搜索结果
Shift+n 向后复看搜索结果

# 指定显示到哪行
less -N +555 aa.log

# 查找aa.log中xxx内容 -n 显示行号 -i忽略大小写
grep -in xxx aa.log

less 在屏幕底部显示一个冒号(:),等待用户输入命令

退出less
ctrl+Z

read

脚本执行赋值的时候,等号左右不要有空格
read -t 5 -p "输入对应的标号:" num 

-s:隐藏输入的内容
-t:给出等待的时间,超时会退出read 秒
-p:给出提示符。默认不支持"\n"换行
num 用于接收输入的内容
输出输入的内容$num ${num}

read -t 5 -p '请输入:' num
echo $num
echo '\n'
echo ${num}

awk

对数据进行列的提取,是⽂本处理⼯具,默认按照空格切分

sort命令⽤于将⽂本⽂件内容加以排序,-n 按照数值排,-
r 按照倒序来排
案例的sort -n 是按照第⼀列的数值⼤⼩进⾏排序,从
⼩到⼤,倒序就是 sort -rn

uniq 去除重复出现的⾏列, -c 在每列旁边显示该⾏重复
出现的次数。

语法: awk '条件1 {执行动作} 条件2 {执行动作} ...' 文件名

# printf输出内容后不换行,print是换行
# awk 默认按照空格切分  $1输出第1列
awk '{printf $1}' aa.sh
awk '{print $1}' aa.sh

$1 #代表第一列 
$2 #代表第二列 
$0 #代表一整行
-F #指定分割符

# df 用于查询磁盘使用率
df -h | grep /dev/vda1 | awk '{printf "/dev/vda1的使用率是:"} {print $5}'

echo "scale=2; 0.13 + 0.1" | bc | awk '{printf "%.2f\n", $0}'

# BEGIN 在读取所有行内容前就开始执行,常常被用于修改内置变量的值 
# FS 在BEGIN时用于定义分割符 
cat /etc/passwd | awk 'BEGIN {FS=":"} {print $1}' 

# END 结束的时候执行 
# NR 行号 
df -h | awk 'NR==2 {print $5}' awk '(NR>=20 && NR<=30) {print $1}' /etc/passwd

grep

grep 对数据进行 行 的提取
语法:grep [选项]...[内容]...[file] 
    [选项] 可以不写,默认是查找匹配内容
    -v  #对内容进行取反提取 除了查找内容的以外内容
    
# -n 显示行号 123为要搜索的内容 aa.sh是从文件搜索
grep -n '123' 'aa.sh'

# 也可以 |为管道符  cat出的内容输送给grep
cat 'aa.sh' | grep -n '123'

cut

cut 对列数据提取
语法:cut [选项]...[file]
    -d  #指定分割符
    -f  #指定截取区域
    -c  #以字符为单位进行分割
    
# 查找aa.sh文件中有bin字符的行输出。cut对列提取
# -d对输出的行以':'分隔,然后取出-f 1 第一列
grep 'bin' 'aa.sh' | cut -d':' -f1

cat

用于连接文件并打印到标准输出设备上

# cat和echo使用 > 和 >>区别
>: 是覆盖原有文件内容
>>: 追加到原有文件末尾 会换行追加

# textfile1 的文档内容--加上行号后--输入 textfile2 这个文档里
cat -n textfile1 > textfile2

# textfile1 和 textfile2 的文档内容--加上行号(空白行不加)之后--将内容附加到 textfile3 文档里
cat -b textfile1 textfile2 >> textfile3

# 清空 /etc/test.txt 文档内容
cat /dev/null > /etc/test.txt

sed

sed的应用场景:主要对数据进行处理(选取,新增,替换,删除,搜索)

-n #把匹配到的行输出打印到屏幕 
p #以行为单位进行查询,通常与-n一起使用 
df -h | sed -n '2p' 

d #删除 
sed '2d' df.txt 

a #在行的下面插入新的内容 
sed '2a 1234567890' df.txt 

i #在行的上面插入新的内容 
sed '2i 1234567890' df.txt 

c #替换 
sed '2c 1234567890' df.txt 

s/要被取代的内容/ 新的字符串/g #指定内容进行替换 sed 's/0%/100%/g' df.txt

搜索:在文件中搜索内容 
cat -n df.txt | sed -n '/100%/p' 

-e #表示可以执行多条动作 
cat -n df.txt | sed -n -e 's/100%/100%---- -100%/g' -e '/100%-----100%/p'

# -n是显示行 搜索k的行显示
sed -n '/k/p' aa.sh

# 打印8到24行
sed -n '8,24p' aa.sh
sed -n '8,24p' aa.sh | grep 'k'

shell语法

-e 目标是否存在(exist)
-d 是否为路径(directory)
-f 是否为文件(file)
# 判断当前目录下是否有foer.sh这个文件,假如没有就创建出foer.sh 文件
[ -e foer.sh ] || touch foer.sh 文件

-r 是否有读取权限(read) 
-w 是否有写入权限(write) 
-x 是否有执行权限(excute) 
[ -x 123.txt ] && echo '有执行权限'

-eq 等于(equal) 
-ne 不等于(not equal) 
-gt 大于(greater than) 
-lt 小于(lesser than) 
-ge 大于或者等于(greater or equal) 
-le 小于或者等于(lesser or equal)

# if判断,[]内部判断要有空格
if [ $num == 5 ];then
    echo 'xx'
elif [ $num == 6 ];then
    echo 'xx'
fi

-o 是或者的意思
-a 是而且的意思
-not 是相反的意思 
if [ $num == 6 -o $num == 8 ];then
    echo 'xx'
fi

while [ 条件判断式 ] 
do 
    执行动作 
done

# for循环
for i in 1 2 3 4 5
do
echo "$i"
sleep 1
done

# `cat xxx` ``这里可以放置其他shell命令
# 默认以空格切分 循环输出内容
for i in `cat /home/ljw/jb.sh`
do
# 双引号里可以有变量,单引号不行
echo "$i"
sleep 1
done


# 查找系统/目录下的文件
find / -ctime +10 -a -type f -name "*.log"
-ctime +10:十天以前的
-type f:是文件类型
-name:指定名字

脚本样例

# $? 判断上个命令执行状态返回0=ok 1=fail
# $aa 或者 ${aa} 都是获取变量aa的值
例如:{}处理连接符的问题,aa=22  则${aa}book 输出是22book  如果使用$aabook  则会把aabook当做变量

# cat 用于查看小文件的命令

[root@MiWiFi-R2D-srv ljw]# ./gg.sh 44 66 kkk ss
第0个参数:./gg.sh
第1个参数:44
第2个参数:66
输入的所有参数是什么:4
总共输入了多少个参数:44 66 kkk ss

注意:
$0 获取当前执行文件的文件名
$1 获取输入的第一个元素44
$2 获取输入的第一个元素66
$# 获取一共输入的参数
$* 等到输入参数的个数

# gg.sh文件
echo "第0个参数:$0"
echo "第1个参数:$1"
echo "第2个参数:$2"
echo "输入的所有参数是什么:$#"
echo "总共输入了多少个参数:$*"

常见的几个符号

# 追加内容echo用于少量输入,,cat用于多内容输入
# >会覆盖原有的内容
cat >gg.txt 
回车然后输入内容 control z可以退出

# >>不会覆盖原有的内容
例如:echo aa >> bb.txt 
把aa追加到bb.txt文件的末尾
    
# ; 用于执行多条命令
cat bb.txt ; ls  
当前目录下先执行cat命令,然后再执行ls命令

# | 管道符
cat bb.txt | grep bb 
符号|就是从cat命令输出的内容里面,继续执行grep的结果  grep查询内容

# && 前面的命令执行成功,后面的才可以执行
cat ssdd.txt && ls

# || 前面的命令执行失败,后面的才可以执行

num = 6
# 双引号里面会输出变量值
"" 会输出变量值 "$num" = 6

# 单引号会直接字符串输出
'' 输出本身 '$num' = $num

# `` 反撇号输出命令结果 
a=`date`
# $a就是日期
echo $a  
       
# 输入的内容赋给 pass
echo "输入你的账号:"
read pass 
echo "这是我的输入;$pass"

# 字符上色
# ``反撇号用于里面内容是命令,需要正常执行
read -p "`echo -e "\033[31m 请输入账号: \033[0m"`"

echo -e "\033[31m 红色字 \033[0m"

查看访问最频繁的前100个IP

# 内容都是以空格分隔,'{print $1}' 输出列的第一列$1
awk '{print $1}' access_temp.log | sort -n | uniq -c | sort -rn | head -n 5

统计访问最多的url 前20名

cat access_temp.log |awk '{print $7}'| sort|uniq -c| sort -rn| head -20 | more

统计耗时接⼝, 列出传输时间超过 2 秒的接⼝,显示前5条

cat time_temp.log | awk '($NF > 2){print $7}'|sort -n|uniq -c|sort -nr|head -5
备注:$NF 表示最后⼀列, awk '{print $NF}'

脚本执行赋值的时候,等号左右不要有空格

sh文件执行方法:

方法1: ./shell.sh
方法2: sh shell.sh 或者bash shell.sh 
方法3: source shell.sh

# 没有权限时
添加执行权限 chmod +x shell.sh
不同于其它语言需要先声明变量 
shell的变量直接使用,
eg: a=15 
调用变量的话 $a 或者 a 或者 ${a}

$? #判断上一条命令执行的是否成功 
$0 #返回脚本的文件名称
$1-$9 #返回对应的参数值
$* #返回所有的参数值是什么
$# #返回参数的个数和

>会覆盖原有的内容
>>不会覆盖原有的内容(追加)
; #执行多条命令
| #管道符
&& #前面的命令执行成功,后面的才可以执行 
|| #前面的命令执行失败,后面的才可以执行 

"" #会输出变量值
'' #输出本身
`` #输出命令结果 
eg:a=`date`; echo $a

# and 
if [ c1 -a c2 ]; then
…
fi
# and 
if [ c1 ] && [ c2 ]; then
…
fi

# or
if [ c1 -o c2 ]; then
…
fi
# or
if [ c1 ] || [  c2 ]; then
…
fi



语法:[ 判断表达式 ]
文件(夹)或者路径:
-e 目标是否存在(exist)
-d 是否为路径(directory)
-f 是否为文件(file)

#判断当前目录下是否有foer.sh这个文件,假如没有就创建出foer.sh
[ -e foer.sh ] || touch foer.sh

权限:
-r 是否有读取权限(read) 
-w 是否有写入权限(write) 
-x 是否有执行权限(excute)

[ -x 123.txt ] && echo '有执行权限'


整数值(int型):
-eq 等于(equal)
-ne 不等于(not equal)
-gt 大于(greater than)
-lt 小于(lesser than)
-ge 大于或者等于(greater or equal) -le 小于或者等于(lesser or equal)

[ 9 -gt 8 ] && echo '大于'


小数(浮点型):
[ `echo '1.2 < 1.3' | bc` -eq 1 ] && echo '小于'


字符串:
= 相等
!= 不相等

[ 'kkkkk' != 'kkkk' ] && echo '不等于'

&&: 前面内容ok,后面才会执行
||: 前面内容no ok,后面才会执行


bc计算器
保留多少位小数可以通过scale 但是scale只对除法,取余数,乘幂 有效,对加减没有效

#计算出0.2+0.3的和并保留俩位小数,此时bc计算器会省略掉个位数的0
echo "scale=2;(0.2+0.3)/1" | bc

#计算出1.2+1.3的和并保留俩位小数
echo "scale=2;(1.2+1.3)/1" | bc

name=kk
echo ${#name}

lsof -i:9900
$?
如果lsof查出来有内容,$?:0 否则是1
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容

  • 生成连续的自然数 seq 1 20 #输出是1,2……20,分隔符是换行符seq -s "," 1 20 #输出是...
    wo_monic阅读 502评论 0 7
  • 内建命令 所谓内建命令,就是bash自身提供的命令,不是外部可执行程序文件,可以用type来确定一个命令是否内建命...
    张国立_0695阅读 322评论 0 0
  • linux是大数据开发入门必备掌握知识,今天给大家介绍下linuxcentos7一些常用的命令 点击链接,从零开...
    呆子_23c9阅读 273评论 0 0
  • 八重樱:怎么从一名码农成为架构师的必看知识点:目录大全(不定期更新) 下面为大家总结Linux shell的常用命...
    八重樱勿忘阅读 274评论 0 1
  • 最近无聊,整理了一些Unix Shell常用命令,借鉴了一些其他文章内容。内容如下 结束语 到这里就结束了,如若不...
    SwordDevil阅读 562评论 0 0