用途:打印出一串有序的数字
格式:seq [选项] 数字范围
eg:
# seq 1 2 10
1
3
5
7
9
#!/bin/bash
echo "欢迎购买福彩双色球,按任意键机选一注"
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)
do
rlen=${#redball[@]}
rnum=$((RANDOM % rlen))
rb[x++]=${redball[rnum]}
unset redball[rnum]
redball=(${redball[@]})
done
bnum=$((RANDOM % blen))
bb=${blueball[bnum]}
read -n1 -s
echo -e "你的幸运号码是:******** \033[31m红球:${rb[@]}\033[0m \033[34m蓝球:$bb\033
[0m ********"
字符转换工具,只能对stdin操作,不能直接对文件操作。
使用tr转换字符:
格式:tr set1 set2
#echo 123456|tr 345 abc
#tr 123 abc < aa
#tr '[a-z]' '[A-Z]' < /etc/hosts
#echo $PATH | tr ':' '\n'
#echo 123456 | tr -d 345
#df -h | tr -d %
例子:
# echo 112233444555666 | tr -s 345
# ifconfig | tr -s ' '
格式:tr -s SET1 SET2
先替换为SET2再压缩
# echo 112233444555666 | tr -s 345 abc
# who | tr -s ‘ ‘ ‘\n’
默认按每行的第一个字符排序。
删除经过排序后的数据的重复记录 ,通常和sort连用。例:
#sort -n tt | uniq
#cat tt | uniq -c
#cat tt | uniq –u
#cat tt | uniq -d
从文本文件或者文本流中提取文本列。
格式:cut -选项 提取范围 文本文件
#ls -l | cut -c10
#who | cut -c 20-40
#cut -c -10 /etc/passwd
#cut -d “:” -f 1,7 /etc/passwd
#who | cut -d ' ' -f1,6
利用循环为数组赋值:
#vi gate.sh
#!/bin/bash
for i in tom jerry lee mike
do
names[x++]=$i;
done
echo ${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/bash
all=$(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=0
for i in $(find $1 -type f | xargs du 2> /dev/null | cut -f1)
do
(($i>10240)) && ((sum=sum+i)) && ((j++))
done
echo 大于10M的文件是:$j
echo 所有文件的总大小是:$((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