shell脚本的一般命令

read命令

从标准输入中读取一行,并把输入行的每个字段的值指定给shell变量

常用参数

-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志,会举例说 明。
-p 后面跟提示信息,即在输入前打印提示信息。
-e 在输入的时候可以时候命令补全功能。
-n 后跟一个数字,定义输入文本的长度,很实用。
-r 屏蔽,如果没有该选项,则作为一个转义字符,有的话 就是个正常的字符了。
-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
-t 后面跟秒数,定义输入字符的等待时间。
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
$ vi shell_0831.sh

#!/bin/bash

echo "----1.read -p and -t ----"
read -t 20 -p "please enter your name:" name

echo $name

expr命令

expr命令可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。它还具有几个特殊功能,判断变量或参数是否为整数、是否为空、是否为0等。

  3 [root@server mnt]# a=123
  4 [root@server mnt]# expr $a + 10
  5 133
  6 [root@server mnt]# expr $a - 10
  7 113
  8 [root@server mnt]# expr $a * 10
  9 expr: syntax error
 10 [root@server mnt]# expr $a \* 10
 11 1230
 12 [root@server mnt]# expr $a / 10
 13 12
 14 [root@server mnt]# expr $a % 10
 15 3

[ ] 和 []和 [](())表达式

 18 [root@server mnt]# echo $[a+10]
 19 20
 20 [root@server mnt]# echo $[a-10]
 21 0
 22 [root@server mnt]# echo $[a*10]
 23 100
 24 [root@server mnt]# echo $[a/10]
 25 1
 26 [root@server mnt]# echo $[a%10]
 27 0
 28 [root@server mnt]# echo $((a+10))
 29 20
 30 [root@server mnt]# echo $((a-10))
 31 0

let命令

与expr命令相比,let命令更简洁直观
[ ]表示可以有多个参数,arg n (n=1,2…)
运算符与操作数据之间不必用空格分开,但表达式与表达式之间必须要用空格分开
当运算符中有<、>、&、|等符号时,同样需要用引号(单引号、双引号)或者斜杠来修饰运算符
let命令在执行后会保存新的值

 35 [root@server mnt]# let a+=10
 36 [root@server mnt]# echo $a
 37 20
 38 [root@server mnt]# let a-=10
 39 [root@server mnt]# echo $a
 40 10
 41 [root@server mnt]# let a*=10
 42 [root@server mnt]# echo $a
 43 100
 44 [root@server mnt]# let a/=10
 45 [root@server mnt]# echo $a
 46 10
 47 [root@server mnt]# let a%=10
 48 [root@server mnt]# echo $a
 49 0
 50 

bc

bc命令是一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下。

 53 [root@server mnt]# echo "scale=4;1.23*4.56" | bc
 54 5.6088
 55 [root@server mnt]# echo "scale=2;1.23*4.56" | bc
 56 5.60
 57 [root@server mnt]# echo 1.2+3.4 | bc
 58 4.6
 59 [root@server mnt]# echo 1.23+4.56 | bc
 60 5.79

示例:

 #!/bin/bash

 read -t 5 -p "请输入两个整数:" a b

 echo "a+b=$[a+b]"
 echo "a-b=$[a-b]"
 echo "a*b=$[a*b]"
 echo "a/b=$[a/b]"
 echo "a**b=$[a**b]"
 echo "a%b=$[a%b]

grep和egrep

用‘grep’搜索文本文件
如果您要在几个文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。
egrep命令用于在文件内查找指定的字符串。
egrep执行效果与"grep-E"相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法

 grep
      -i      ##忽略字母大小写
      -v      ##条件取反
      -c      ##统计匹配行数
      -q      ##静默,无任何输出
      -n      ##显示匹配结果所在的行号

-q:

 [root@server mnt]# grep '172.25.254.250' /etc/hosts && echo 'YES' || echo 'NO'
 172.25.254.250 content.example.com
 YES
 [root@server mnt]# grep -q '172.25.254.250' /etc/hosts && echo 'YES' || echo 'NO'
 YES

-c

[root@server mnt]# egrep -c '/root' /etc/passwd
2

-v

[root@server mnt]# egrep -vc '/root' /etc/passwd
37

基本元字符:^ 和 $

^表示以某个字符开头的,$表示以某个字符结尾的

[root@server mnt]# egrep  '^root' /etc/passwd   查看文件 /etc/passwd 中以root开头的行
root:x:0:0:root:/root:/bin/bash
[root@server mnt]# egrep  '^bash' /etc/passwd   查看文件 /etc/passwd 中以bash结尾的行

基本元字符:. ##过滤非空行

[root@server mnt]# egrep '.' wsp 
root sbin
root sbin root
root sbin sbin
root
awd
awd
awd
 
[root@server mnt]# egrep -v '.' wsp     ##过滤空行
[root@server mnt]# egrep  '^$' wsp      ##过滤空行

基本元字符: + ? *

[root@server ~]# egrep 'f+' 1.sh        ##输出包括f,ff,fff....,即至少出现一次
 colorful,color
 colorfulful?
 stuf
 stuff
 stufff
 stuffff
 stufawd
 we adw dfg awda
 wea web wef
  
 [root@server ~]# egrep 'color(ful)?' 1.sh       ##末尾的ful最多出现一次,也可以没有
 color color color
 colorful,color
 color color.
 colorfulful?

元字符:{}
[root@server ~]# egrep '(we){3}' 1.sh
rere wewewe
westos wewewewe Shell
[root@server ~]#
[root@server ~]#
[root@server ~]# egrep '(we){2,4}' 1.sh
xcvb wewe asdawd
rere wewewe
westos wewewewe Shell
[root@server ~]#
[root@server ~]# egrep '(we){3,}' 1.sh
rere wewewe
westos wewewewe Shell
[root@server ~]# egrep '(we)[ab]' 1.sh
weawe IPADDR
wea web wef
[root@server ~]# egrep '[A-Z]' 1.sh
weawe IPADDR
westos wewewewe Shell

cut命令

cut -d  ##指定分隔符
cut -d : -f 1-3 /etc/passwd     ##指定分隔符为:,显示第1到3列
cut -c 1,4 /etc/passwd          ##显示第一和第四个字符

sort 命令

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

sort
        -n      ##纯数字排序
        -r      ##倒序
        -u      ##去掉重复数字
        -o      ##输出到指定文件中
        -t      ##指定分隔符
        -k      ##指定要排序的列


[root@server ~]# sort westos 

1
12
123
2
3
32
5
51
6
7


[root@server ~]# sort -nt : -k 2 westos
2:0
3:2
5:4
6:4
1:5
12:10
2:12
51:20
5:21
123:22
32:31
51:55
123:66

uniq命令:对重复字符处理

uniq
    -u      ##显示唯一的行
    -d      ##显示重复的行
    -c      ##每行显示一次并统计重复次数
[root@server ~]# sort -n westos | uniq -c
      1 0
      1 1
      2 2
      1 4
      1 6
      1 9
      2 10
      1 20
      1 22
      2 31
      1 55

test命令

test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

test "$a" == "$b" 等同于 [ "$a" == "$b" ]

[ "$a" = "$b" ]         ##等于
[ "$a" != "$b" ]        ##不等于
[ "$a" -eq "$b" ]       ##等于
[ "$a" -ne "$b" ]       ##不等于
[ "$a" -le "$b" ]       ##小于等于
[ "$a" -ge "$b" ]       ##大于等于
[ "$a" -gt "$b" ]       ##大于
[ "$a" -lt "$b" ]       ##小于
[ "$a" -ne "$b" -a "$a" -gt "$b" ]      ##-a必须条件都满足
[ "$a" -ne "$b" -o"$a" -gt "$b" ]       ##-a条件至少满足一个
[ -z "$a" ]             ##是否为空
[ -e "file" ]           ##是否存在
[ -f "file" ]           ##普通文件
[ -b "file" ]           ##块设备
[ -S "file" ]           ##套接字
[ -c "file" ]           ##字符设备
[ -L "file" ]           ##软链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值