Shell(二)

目录

read读取控制台输入

函数

系统函数

basename

dirname 

自定义函数

基本语法

经验技巧

正则表达式

特殊字符:^

特殊字符 : $ 

特殊字符:.

特殊字符:*

 文本处理工具

cut  

  awk 

 综合案例

归档文件

发送消息


read读取控制台输入

基本语法

read   (选项) (参数) 

选项:

-p : 指定读取值时的提示符      

-t  : 指定读取值时等待的时间(秒)如果-t 不加表示一直等待 

参数   变量:指定读取值的变量名

函数

系统函数

basename

基本语法:

basename [string / pathname] [suffix] 
basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来
basename 可以理解为取路径里的文件名称
选项: suffix 为后缀,如果 suffix 被指定了, basename 会将 pathname string 中的 suffix 去掉

dirname 

 基本语法

dirname  文件绝对路径  

功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
dirname 可以理解为取文件路径的绝对路径名称

自定义函数

基本语法

[ function ]  funname [()] 

{

      Action ;

      [return int;]

}

经验技巧

1. 必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一

样先编译
2. 函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将
以最后一条命令运行结果,作为返回值。 return 后跟数值 n(0-255)
#!/bin/bash
function sum() 
{ 

s=0 s=$[$1+$2] 

echo "$s" 

}

read -p "Please input the number1: " n1; 
read -p "Please input the number2: " n2; 

sum $n1 $n2;

正则表达式

   正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文 本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在 Linux 中,grep,sed,awk 等文本处理工具都支持通过正则表达式进行模式匹配

特殊字符:^

 ^ 匹配一行的开头 (匹配所有以a 开头的行)

$ cat /etc/passwd | grep ^a

特殊字符 : $ 

  $  匹配一行的结束  (匹配所有以t结尾的行)

$ cat /etc/passwd | grep t$

特殊字符:.

. 匹配一个任意的字符(会匹配包含rabt,rbbt,rxdt,root) 等的所有行

$ cat /etc/passwd | grep r..t

特殊字符:*

* 不单独使用,他和上一个字符连用,表示匹配上一个字符 0 次或多次 
会匹配 rt, rot, root, rooot, roooot 等所有行
$ cat /etc/passwd | grep ro*t

 文本处理工具

cut  

       cut 的工作就是 ,具体的说就是在文件中负责剪切数据用的。 cut 命令从文件的每
一行剪切字节、字符和字段并将这些字节、字符和字段输出。
基本用法 
cut  [ 选项参数 ]  filename   (默认分隔符是制表符)
选项参数功能
-f
列号,提取第几列
-d
分隔符,按照指定分隔符分割列,默认是制表符“\t”
-c
按字符进行切割 后加加 n 表示取第几列 比如 -c 1

  awk 

   一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理

基本用法
awk [ 选项参数 ]  ‘ /pattern 1/{action1}  /pattern2/{action2}  ....'   filename  
patern : 表示awk在数据中查找的内容,就是匹配模式
action :在找到匹配内容时所执行的一系列命令 
选项参数

功能

-F指定输入文件分隔符
-v赋值一个用户定义变量

 综合案例

归档文件

#!/bin/bash

if 
[ $# -ne 1 ]
 then

 echo "参数个数错误!应该输入一个参数,作为归档目录名" 
exit 

fi

# 从参数中获取目录名称

 if [ -d $1 ]

 then 

echo 

else 
        echo 
        echo "目录不存在!" 
        echo 
        exit 
fi 

DIR_NAME=$(basename $1) 

DIR_PATH=$(cd $(dirname $1); pwd)

# 获取当前日期 DATE=$(date +%y%m%d)

# 定义生成的归档文件名称 

FILE=archive_${DIR_NAME}_$DATE.tar.gz

 DEST=/root/archive/$FILE 

# 开始归档目录文件 

echo "开始归档..." 

echo 

tar -czf $DEST $DIR_PATH/$DIR_NAME 

if [ $? -eq 0 ] 

then 

         echo 
         echo "归档成功!" 
         echo "归档文件为:$DEST" 
         echo 
else 
         echo "归档出现问题!" 
         echo 
fi

exit

发送消息

#!/bin/bash

login_user=$(who | grep -i -m 1 $1 | awk '{print $1}')

if [ -z $login_user ]

then 
     echo "$1 不在线!" 
     echo "脚本退出"
     exit
fi

if [ -z $2 ]
then 
     echo "没有脚本发出"
     echo "脚本退出" 
     exit
fi

whole_msg=$(echo $* | cut -d " " -f 2- )

user_terminal=$(who | grep -i -m 1 $1 | awk '{print $2}') 

echo $whole_msg | write $login_user $user_terminal

if [ $? != 0 ] 

then  
     echo "发送失败!" 
else 
     echo "发送成功!"

fi

exit

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值