shell 常用命令

### date 时间
# 显示时间
date + "%Y%m%d%H"
# 明天的日期
date -d "tomorrow" +"%Y-%m-%d"
# 前天的日期
date -d "1 days ago" +"%Y-%m-%d"

### cut 切割
# 查看在线用户
who | cut –c1-8
#从系统文件/etc/passwd中获取用户名列表
cut –d: -f1 /etc/passwd

### paste 
paste –d’:’ filename1 filename2

### sort 排序
# 对/etc/passwd 文件的第三项进行排序(userid)
sort -t: -k 3n /etc/passwd

# 基于ip地址对/etc/hosts文件排序
sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts

### uniq 对数据进行去重
# 找出/etc/passwd文件中的重复用户名
sort /etc/passwd | cut –f1 –d: | uniq –d

### sed编辑数据
sed –n ‘-1,2p’ file.txt         #显示前两行
sed –n ‘/UNIX/p’ filename  #显示包含“UNIX“的行
sed ‘1,2d’ intro                 #删掉前两行
sed ‘/UNIX/d’ intro            #删掉包含“UNIX“的行
#替换
sed ‘s/Unix/UNIX/g’ test.sh

### vi
# 光标移动
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾

# 删除命令
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
:n1,n2 d:将n1行到n2行之间的内容删除

# 搜索替换
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换

# 复制粘贴
yy:复制当前行,将光标移动到某一行,p粘贴
n1,n2 co n3:n1为起始行,n2为结束行,n3为粘贴行(其中,co是copy的简称,也可以直接用copy代替)

# 文件保存与退出
:w :保存当前文件
:x :保存当前文件并退出
:q!:不保存文件并退出vi

# find 查询

(1 )find pathname -options [-print -exec -ok ...]

-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

(2) 选项

-name:按照文件名查找文件
-mtime -n +n:按照文件的更改时间来查找文件, – n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前
-newer file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件
-type:查找某一类型的文件,诸如:b – 块设备文件,d – 目录,c – 字符设备文件,p – 管道文件,l – 符号链接文件,f – 普通文件

-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找

(3) xargs

find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用.

(4) 举例

用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中
find . -type f -exec ls -l { } \;
查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;
find / -type f -size 0 -exec ls -l { } \;
用grep命令在所有的普通文件中搜索hostname这个词:
find . -type f -print | xargs grep “hostname”

# 数学计算 expr

expr可用于计算各种表达式的值,可包含字符串,逻辑运算和函数(但没有指数或者对数函数)。

加法:answer=`expr $c + $d`
减法:answer=`expr $c – $d`
乘法:answer=`expr $c \* $d`
减法:answer=`expr $c / $d`

# shell内部运算

shell自身可进行数学计算,使用shell内部函数的好处是,不用调用外部程序,从而减少外部内存使用量。

加法:answer=$(($c + $d))
减法:answer=$(($c – $d))
乘法:answer=$(($c * $d))
减法:answer=$(($c / $d))

# bc计算器

前面两种数学计算方法均是集中在整数计算上,而bc是一个实现任意精度的计算器,可通过设置scale(小数点后十进制位数),达到想要的精确度的结果。

加法:answer=`echo “$c + $d”|bc`
减法:answer=`echo “$c – $d”|bc`
乘法:answer=`echo “$c * $d”|bc`
减法:answer=`echo “$c / $d”|bc`

# 使用scale设置精度:

answer=`echo “scale=5;$c * $d”|bc`
若想使用三角函数,需要用-l选项激活bc,启动数学函数库:
answer=`echo “scale=5; c($d)”|bc -l`



 

 

posted on 2023-10-24 10:30  luokeli  阅读(29)  评论(0)    收藏  举报

导航