seq命令,tr命令,sort命令,cut命令

来源:互联网 发布:淘宝直播开蚌是真的吗 编辑:程序博客网 时间:2024/05/22 00:07

seq命令

用途:打印出一串有序的数字
格式:seq [选项] 数字范围

  • -s:指定分隔符
  • -w:指定同等带宽输出

  • 这里写图片描述

eg:

# seq 1 2 1013579

数组和seq命令的应用

eg:选择双色球

要求写脚本实现如下图所示的功能。
这里写图片描述
答案:

#!/bin/bashecho "欢迎购买福彩双色球,按任意键机选一注"redball=($(seq 32))echo -e "\033[31m红球:\n$(echo ${redball[@]})\033[0m"blueball=($(seq 16))echo -e "\033[34m蓝球:\n$(echo ${blueball[@]})\033[0m"blen=${#blueball[@]}for i in $(seq 6)dorlen=${#redball[@]}rnum=$((RANDOM % rlen))rb[x++]=${redball[rnum]}unset redball[rnum]redball=(${redball[@]})donebnum=$((RANDOM % blen))bb=${blueball[bnum]}read -n1 -secho -e "你的幸运号码是:******** \033[31m红球:${rb[@]}\033[0m \033[34m蓝球:$bb\033[0m ********"

tr命令

字符转换工具,只能对stdin操作,不能直接对文件操作。
使用tr转换字符:
格式:tr set1 set2

  • 用set2中的字符替换掉set1中同一位置的字符(并没动源文件)
#echo 123456|tr 345 abc#tr    123 abc < aa#tr    '[a-z]'    '[A-Z]' < /etc/hosts#echo    $PATH    |    tr  ':'   '\n' 
  • 删除字符 -d
    • 格式:tr -d set
    • 将stdin中数据流删除与set相同的字符
#echo 123456 | tr -d 345 #df -h | tr -d %
  • 压缩字符 -s
    • 格式:tr -s SET
    • 将连续相同的字符压缩成一个字符

例子:

# echo 112233444555666 | tr -s 345# ifconfig | tr -s ' '

格式:tr -s SET1 SET2
先替换为SET2再压缩

# echo 112233444555666 | tr -s 345 abc# who | tr -s ‘ ‘  ‘\n’

sort 排序命令

默认按每行的第一个字符排序。

  • -n:按整数进行排序
  • -r:递减排序
  • -k:指定哪一列为排序键
    • #cat tt | sort -n -k4
  • -t:指定字段分割符(默认是空格)
    • #sort -t: -n -k3 /etc/passwd

uniq去重命令

删除经过排序后的数据的重复记录 ,通常和sort连用。例:
#sort -n tt | uniq

  • 数据的实例统计
    -c:统计特定记录出现的次数
    #cat tt | uniq -c
  • -u:只显示唯一的行
    #cat tt | uniq –u
  • -d:只显示重复的行
    #cat tt | uniq -d

cut 提取命令

从文本文件或者文本流中提取文本列。
格式:cut -选项 提取范围 文本文件

  • -c:从指定提取范围中提取字符
#ls -l | cut -c10#who | cut -c 20-40#cut -c -10 /etc/passwd
  • -f:从指定提取范围中提取字段
  • -d:指定分隔符。默认是Tab
#cut -d “:” -f 1,7 /etc/passwd#who | cut  -d '  '  -f1,6
  • 提取范围:
    • n:第n项
    • n-:第n项到行尾
    • -m:行首到第m项
    • n,m:第n项和第m项
    • n-m:第n项到第m项

数组的用法–补充

利用循环为数组赋值:

#vi gate.sh#!/bin/bashfor i in tom jerry lee mikedonames[x++]=$i;doneecho ${names[@]}

([x++]可以直接用,不用事先定义)

练习:

1.截取出本机上所有网卡的ip地址和子网掩码、默认网关
2.格式如下:
eth0 ip adreess is 172.16.1.1/16
eth1 ip adreess is 173.168.1.1/16
default gateway is 173.168.20.20
dns servers are 114.114.114.114 219.146.1.66

得到eth0和eth1的名字:# ip add|grep "mtu"|awk '{print $2}'|tr -d :得到eth0的ip地址:#ifconfig eth0|grep "inet addr"|tr -s ':' ' '|cut -d' ' -f4得到eth1的ip地址:#ifconfig eth1|grep "inet addr"|tr -s ':' ' '|cut -d' ' -f4 得到默认网关:# route -n|grep "^192"|awk '{print $2}'获得DNS:# cat /etc/resolv.conf |grep " DNS1"|tr = ' '|awk '{print $3}'# cat /etc/resolv.conf |grep " DNS1"|tr = ' '|cut -d ' ' -f3

练习 :

1.只显示/boot目录下所有对象的实际空间,并按由小到大排序
2.统计/etc/passwd中每种shell的被使用次数
3.用fdisk -l命令只显示出分区和文件系统的类型
4.统计/etc/passwd文件中sbin这个单词出现多少次
5.用find命令查找/根目录下所有包含特殊权限的对象,并只显示出对象的权限和文件名称,不能显示错误提示
6.列出前5位占MEM最多的进程的命令
7.只显示网卡eth0的IP地址

答案:

①find /boot –exec ls -l {} \; | tr -s ' ' | cut -d' ' -f5 | grep -v ^$ | sort –n②cat /etc/passwd | cut -d: -f7 | sort | tail -n +2 | uniq -c③fdisk -l | grep ^/dev | tr -s '*' ' ' | cut -d' ' -f1,6-④cat /etc/passwd | tr -s ':/ ' '\n' | sort | uniq -c | grep sbin⑤find / -perm +7000 -exec ls -ld {} \; 2>/dev/null |tr -s ' ' | cut -d' ' -f1,9 | cut -c 2-10,12-⑥ps aux | tr -s ' ' | tail -n +2 | sort -k4 -rn | head -5⑦ifconfig eth0 | grep "inet addr" | tr -s ':' ' ' |cut -d' ' -f4

练习:

编写脚本统计指定目录下面文件占用空间大小超过10M的文件的数目和大小总和 (使用1个位置参数指定目录的绝对路径)

这里写图片描述

答案:

#!/bin/bashall=$(find $1 -size +10240k -type f -exec ls -l {} \; 2> /dev/null | cut -d ' ' -f5 |tr '\n' '+')num=$(find $1 -size +10240k -type f -exec ls -l {} \; 2> /dev/null |wc -l )((size=(${all}0)/1024/1024))echo "超过10M的文件数目: $num"echo "这些文件的总大小是: ${size}M“j=0for i in $(find $1 -type f | xargs du 2> /dev/null | cut -f1)do  (($i>10240)) && ((sum=sum+i)) && ((j++))doneecho 大于10M的文件是:$jecho 所有文件的总大小是:$((sum/1024))M

练习:

把/etc/passwd下面的所有用户截取出来放在一个数组里。
答案:

# user_name=($(cat /etc/passwd|awk -F: '{print $1}'))# echo ${user_name[@]}

关联数组

(我认为:关联数组即可以自定义下标的特殊数组)

#declare -A name#name=([user]=aa  [pwd]=bb  [age]=cc)#echo ${name[@]}    --》显示数组全部元素bb aa  cc# echo ${#name[@]}    --》显示数组元素个数3# echo ${!name[@]}     --》显示数组下标pwd user age# echo ${name[user]}   --》显示下标为user的数组元素是啥aa
原创粉丝点击