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