shell脚本常用命令一

本文详细介绍了Shell脚本中常用的几个命令,包括判断上一个程序执行是否成功、检查文件或目录存在、字符串判断、expect用法、awk命令、cut命令以及grep命令的简单应用。这些命令对于编写高效Shell脚本至关重要。
摘要由CSDN通过智能技术生成

1、判断上一个程序执行是否成功

$? 是上一个程序执行是否成功的标志,如果执行成功则$? 为0,否则 不为0

平常也可以直接在命令行输入

echo "$?"

平常shell脚本里面检测关键步骤

if [ $? != 0 ]; then
	echo "xxx erorr"
	exit
fi

2.判断文件夹或文件是否存在

if [ -f  file ]    如果文件存在

if [ -d xxx   ]    如果目录存在

if [ -s file  ]    如果文件存在且非空 

if [ -r file  ]    如果文件存在且可读

if [ -w file  ]    如果文件存在且可写

if [ -x file  ]    如果文件存在且可执行  

脚本使用判断

##检测文件夹是否存在,不存在就创建,存在就跳过
check_file_is_exists(){
if [ ! -d $1 ] ;then
##加上-p防止多层目录创建报错
mkdir -p $1
else
"文件夹存在"
fi
}
##检测文件是否存在,不存在就创建,存在就跳过
check_file_is_exists(){
if [ ! -f $1 ] ;then
touch  $1
else
echo "文件存在"
fi
}

3.判断字符串是否为空

if  [ -n $string  ]             如果string 非空(非0),返回0(true)  

if  [ -z $string  ]             如果string 为空

4.expect的简单用法

#!/bin/bash

#数据保存服务器参数设置
ip=192.168.74.101
passwd=p@ssw0rd
user=wanghao
datadir=/hdfs/sc_irs/sc_history

send_file() {
expect <<EOF
set timeout -1
spawn scp -r $1 $user@$ip:$datadir
##第一次进行远程copy会出现yes/no的确认
expect {
    ##匹配到了yes/no后执行send发送yes
    "yes/no"
	{send "yes\r";exp_continue}
 ##exp_continue继续匹配
	"password:"
	{send "$passwd\r"}
}
expect "]$" { send "exit\r"}
EOF
}
send_file /opt/ouyanglei/aa  > log.scplog

echo "执行完成"

1. [set timeout -1]

这是设置超时时间的,现在你只要记住他的计时单位是:秒

-1就是不设置超时时间

2. [spawn scp -r $1 $user@$ip:$datadir]

spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的,它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

此句是使用scp传输文件

3.expect { "yes/no" {send "yes\r";exp_continue} ##exp_continue继续匹配 "password:" {send "$passwd\r"} }

这里的expect也是expect的一个内部命令。这个命令的意思是判断上次输出结果里是否包含"yes/no"的字符串,如果有则执行send发送,否则就等待设置的超时时间后返回,如果设置-1就一直等待

4. {send "$passwd\r"}

这里就是执行交互动作,与手工输入密码的动作等效,命令字符串结尾别忘记加上 “\r”,

5. expect "]$" { send "exit\r"}

匹配终端字符串,如果出现 “]$” 就发送exit退出(注:root用户终端是"]#")

5.awk命令简单用法

awk '{print $1}'不带参数,默认按照空格进行分割

awk -F : '{print $1}' 通过-F自定义分割符,如分号:可以给自定义分隔符加单引号也可以不加

'{print $1$2}' 此项必须要加单引号,$1表示打印第一列,$2表示打印第二列

awk '{print $NF}' 取最后一列数据
awk '{printf $NF}'取最后一列成一行

6、cut命令简单用法

在我的使用过程中,我感觉cut的用途和awk很类似,因为我大多是用来截取某些字段,实际还是有很大区别的。

cut -f1,2 -d[

-f 是字段模式 1,2取第一第二两个字段,连续字段可以用-连接,如取2、3、4字段2-4

-d 自定义的分隔符

发现cut截取多个字段时候会带上分隔符

7、grep命令简单使用

非常实用的一个命令,平常修改某个配置文件的某个参数,知道参数但是却不知道在哪,这个时候使用grep就非常方便找到在多少行了

常用选项:

  -E :开启扩展(Extend)的正则表达式。

  -i :忽略大小写(ignore case)。

  -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。

  -n :显示行号

  -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker

  -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。

  -o :只显示被模式匹配到的字符串。

  --color :将匹配到的内容以颜色高亮显示。

  -A  n:显示匹配到的字符串所在的行及其后n行,after

  -B  n:显示匹配到的字符串所在的行及其前n行,before

  -C  n:显示匹配到的字符串所在的行及其前后各n行,context

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值