Shell编程入门(第二版)(中)

变量测试语句-test

作用:用来测试变量是否相等,是否为空,文件类型等。

格式:

test 测试条件 或 [] #范围:整数,字符串,文件  

 

1)整数测试

test int1 -eq int2  测试整数是否相等 

test int1 -ge int2  测试int1是否>=int2 

test int1 -gt int2  测试int1是否>int2 

test int1 -le  int2 测试int1是否<=int2 

test int1 -lt int2  测试int1是否<int2 

test int1 -ne int2  测试整数是否不相等

 

2)字符串测试

test str1=str2  测试字符串是否相等 

test str1!=str2  测试字符串是否不相等 

test str1  测试字符串是否不为空 

test -n str1  测试字符串是否不为空 

test -z str1  测试字符串是否为空

 

3)文件测试

test -d file  指定文件是否目录 

test -f file  指定文件是否常规文件 

test -x file  指定文件是否可执行 

test -r file  指定文件是否可读 

test -w file  指定文件是否可写 

test -a file 指定文件是否存在 

test -s file 文件的大小是否非0

 

注:test测试语句一般不单独使用,一般作为if语句的测试条件,;

if test -d file
then....
fi


 

test的变量的简写形式”[]”

 

示例-apachtest.sh

#!/bin/bash
# A test shell script for test Apache is running or notweb=$(/usr/bin/pgrep httpd)echo "Now let's test the Apache..."
echo#if [ "$web" != "" ]
if [ -n "$web" ]
thenecho "Apache is running..."
elseecho "Apache is NOT running..."/etc/rc.d/init.d/httpd start
fi

流程控制语句

流控制语句:用于控制shell程序的流程 

exit语句:退出程序执行,并返回一个返回码,返回码为0表示正常退出,0表示非正常退出。 

例如:exit 0 

 

一、if

if/then格式

if test -d $1 
then ... 
fi 

示例-if_then.sh

#!/bin/bash
# A test shell script for if/thenif [ -x /etc/rc.d/init.d/httpd ]
thenecho "Script: /etc/rc.d/init.d/httdp have x power!"/etc/rc.d/init.d/httpd restart
fi

if/else格式

	if 条件1 then 命令1 elif 条件2then 命令2 else 命令3 fi 

多个条件的联合

-a: 逻辑与,仅当两个条件都成立时,结果为真。 

-o: 逻辑或,两个条件只要有一个成立,结果为真。

 

示例-if_else.sh

#!/bin/bash
# A test shell script for if/elif/elseecho -n "Please input a filename: "
read filenameif [ -d $filename ]
thenecho "$filename is a directory"
elif [ -f $filename ]
thenecho "$filename is a commen file"
elif [ -c $filename -o -b $filename ]
thenecho "$filename is a device file"
elseecho "$filename is a unkown file"
fi

 

示例-if_elif_exit.sh

#!/bin/bash
# A test shell script for if/elifif [ $# -ne 2 ] 
then
echo "Not enough parameters"
exit 1
fiif [ $1 -gt $2 ]
thenecho "$1 is great then $2"
elif [ $1 -lt $2 ]
thenecho "$1 is little then $2"
elseecho "$1 is equal as $2"
fi

二、for/in

for 变量 in 名字表 
do 命令列表 
done 

示例-for.sh

#!/bin/bash
# A test shell script for "for"for DAY in Sunday Monday Tuesday Wednesday Thursday Friday Saturday
doecho "The day is $DAY"
done


awk命令[分段提取]

awk -F域分隔符 命令[单引号] #如果不用-F指定分割符,默认为空格

 

1、检测系统中UID0的用户 

awk -F: '$3==0 {print $1}' /etc/passwd

#awk -F: '{print $1}' /etc/passwd

-F 指定分割附为:

$3 表示以:为分割附的第三位

 

2、检测系统中密码为空的用户 

awk -F: 'length($2)==0 {print $1}' /etc/shadow 

#ps aux | grep -v root | awk '{print $2}'

示例-awk.sh

#!/bin/bash
# A test script for desplay users infomation/bin/echo -n "Please input a username: "
read username/bin/grep $username /etc/passwd > /dev/null 2> /dev/nullif [ $? -eq 0 ]
then/bin/echo "username is: $username"
else/bin/echo "user: $username is not exits."exit 1
fi
/bin/echo# list /etc/passwd info
userinfo=`/bin/grep ^$username:x /etc/passwd`
uid=`echo $userinfo | awk -F: '{print $3}'`
gid=`echo $userinfo | awk -F: '{print $4'}`
dir=`echo $userinfo | awk -F: '{print $6}'`
shell=`echo $userinfo | awk -F: '{print $7}'`# get /etc/group info
groupinfo=`/bin/grep x:$gid /etc/group`
gname=`/bin/echo $groupinfo | awk -F: '{print $1}'`/bin/echo "user id is: $uid"
/bin/echo "default group is: $gname"
/bin/echo "home directory is: $dir"
/bin/echo "shell is: $shell"
/bin/echo "group member info:"# get group members
groups=`/usr/bin/groups $username`
/bin/echo $groups
/bin/echo# get online info
online=`/usr/bin/who | grep $username`
if [ -z "$online" ]
thenecho "$username is not online"
elseecho "$username is online..."
fi

 

实例-killuser.sh

#思路:将一个用户所有的进程包括shell都关闭,则相当于将该用户踢出了系统
#!/bin/bash
# A shell sript to kill a user in Linuxusername=$1killpid=`/bin/ps aux | grep $username | awk '{print $2}'`for PID in $killpid
do/bin/kill -9 $PID 2> /dev/null
done

转载于:https://www.cnblogs.com/itrena/p/5927018.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS之中间固定两边自适应宽度

第一种&#xff1a;浮动布局实现 HTML&#xff1a; 这种方法我利用的就是浮动原理&#xff0c;左右定宽度分别进行左浮动和右浮动&#xff0c;此时主内容列&#xff08;中间列没有定度&#xff09;主会自动插入到左右两列的中间&#xff0c;最要注意的一点是&#xff0c;中间列…

将ocx和DLL文件打包成cab文件,inf的编写

From: http://icrwen.iteye.com/blog/1118766 http://blog.csdn.net/yimiyangguang1314/article/details/6563540 将ocx和DLL文件打包成cab文件&#xff0c;实现IE浏览器在线安装 分类&#xff1a; Windows应用2010-03-25 18:36 2722人阅读 评论(14) 收藏 举报我们打开淘宝等网…

用ADOQuery创建SQL Server数据库,并创建表结构、存储过程和视图

昨天做系统的安装&#xff0c;搞这个搞到头大&#xff0c;现在把总结写下巴。 PS&#xff1a;贴上来代码的缩进就乱掉了 用SQL Server企业管理器导出的SQL文件是不能直接在ADOQuery里用的&#xff0c;因为ADOQuery不支持GO&#xff0c;不支持注释&#xff0c;视图和存储过程的创…

Linux Shell 中 > 和 >> 的异同点和应用场景

和 >> 的异同点 举例说明&#xff08;start.sh 为某个服务的启动脚本&#xff0c;start.log 为某服务的日志文件&#xff09;&#xff1a; nohup sh start.sh >/var/log/start.log & nohup sh start.sh >>/var/log/start.log &1、相同点 上面两种写法&…

自己动手写简单的web应用服务器(1)—tcp通信

1.socket简介: socket通常称作"套接字"&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件&#xff0c;同时提供几种服务。每种服务都打开一个socket&#xff0c;并绑定在一个端口上&#xff0c;不同的端口…

Taro+react开发(35) 实现拖动

<View><ScrollViewclassName"scrollview"scrollYscrollWithAnimationscrollTop{scrollTop}style{scrollStyle}lowerThreshold{Threshold}upperThreshold{Threshold}onScrollToUpper{this.onScrollToUpper.bind(this)} // 使用箭头函数的时候 可以这样写 onS…

CSS之左定宽度右自适应宽度并且等高布局

一、两列布局&#xff1a;左边固定宽度&#xff0c;右边自适应宽度 方法1&#xff1a;浮动布局 采用的是左边浮动&#xff0c;右边加上一个margin-left值&#xff0c;让他实现左边固定&#xff0c;右边自适应的布局效果 HTML: CSS: 上面这种实现方法最关键之处就是自适应宽度…

Windows Server 2003 R2与SP2 的区别

关于 R2&#xff0c;很多人分不清楚 R2 与 SP2 的关系&#xff0c;总是有人提出“R2 与 SP2 有什么区别”、“我应该将 Server 2003 升级到 R2 还是 SP2”之类的问题。其实 R2 与 SP2 两者并不冲突…… Windows Server 2003 R2 是微软为了扩展 Windows Server 2003 系统的功能而…

Linux scp 免密码 传输文件

SCP的使用 背景介绍 最近项目是集群化部署&#xff08;由 node1&#xff0c;node2&#xff0c;node3 三台 CentOS 7.4 的虚拟机构成&#xff09;。 但是&#xff0c;涉及到跨机器同步文件的问题&#xff0c;想通过写shell文件实现&#xff0c;用 crontab 设置定时任务&#…

ActiveX控件打包成Cab置于网页中自动下载安装

From: http://www.iteye.com/topic/110834 makeCAB.rar (188.5 KB) [背景] 做过ActiveX控件的朋友都知道&#xff0c;要想把自己做的ActiveX控件功能放在自己的网页上使用&#xff0c;那么用户在客户端就必须进行本地的注册&#xff0c;也就是说用户得首先要把该ActiveX控件(te…

我的博客我做主

今天刚刚注册了我的博客&#xff0c;本人将在这里叙写关于编程的方方面面新的知识点。首先声明&#xff0c;本人的编程还是个刚刚入门&#xff0c;所以现在只是向老前辈们学习&#xff0c;如果有比较经典的知识点&#xff0c;我会把把学到的新的知识点留在自己的博客上&#xf…

CSS之创建等高列布局之一

高度相等列在Web页面设计中永远是一个网页设计师的需求。如果所有列都有相同的背景色&#xff0c;高度相等还是不相等都无关紧要&#xff0c;因为你只要在这些列的父元素中设置一个背景色就可以了。但是&#xff0c;如果一个或多个列需要单独设置自己的背景色&#xff0c;那么它…

转这10句话

第一句 如果我们之间有1000步的距离  你只要跨出第1步 我就会朝你的方向走其余的999步 第二句 通常愿意留下来跟你争吵的人  才是真正爱你的人 第三句 付出真心 才会得到真心  却也可能伤得彻底 保持距离 就能保护自己  却也注定永远寂寞 第四句 有时候 不…

一篇介绍VC开发OCX的文章,写得太棒了!!!

From: http://www.cnblogs.com/gengaixue/archive/2010/08/13/1799112.html VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程 开篇语&#xff1a;最近在弄ocx控件发布到asp.net网站上使用&#xff0c;就是用户在使用过程中&#xff0c;自动下载安装ocx控件。&…

Taro+react开发(37)箭头函数括号加个return

{getLearnList.map((item, index) > (<View><View key{index} className"img-title"><Text>xueyuan</Text><Image mode"widthFix" src{item.imgCoverPath} /></View></View>))}

使用webpack打包后的vue项目如何运行(express)

我们知道使用webpack打包vue项目后会生成一个dist文件夹&#xff0c;dist文件夹下有html文件和其他css、js以及图片等&#xff0c;那么打包后的文件该如何正确运行呢&#xff1f; 倘若直接打开html文件&#xff0c;会报如下错误&#xff1a; 那么该如何运行呢&#xff1f;其实…

数据链路层与交换机

1. 数据链路层的功能是什么&#xff1f;负责网络中相邻节点之间可靠的数据传输&#xff0c;并进行有效的流量和差错控制。具体地讲&#xff0c;以一次数据发送为例&#xff0c;数据链路层的作用包括数据链路的建立、维护与拆除、帧包装、帧传输、帧同步、帧的差错控制以及流量控…

编译vo-aacenc遇到的问题

sourceforge更新了vo-aacenc到0.1.3&#xff0c;就把自己的编码器也更新到最新。编译过程中无聊多测试了一下 发现一个小问题http://sourceforge.net/projects/opencore-amr/files/vo-aacenc/下载后解压 1 [gonglinux vo-aacenc-0.1.3]$ pwd 2 /home/gong/ff4android/vo-aacenc…

CSS之创建等高列布局之二

3. 给容器div使用单独的背景色&#xff08;流体布局&#xff09; 这种布局可以说是就是第二种布局方法&#xff0c;只是这里是一种多列的流体等高列的布局方法。前面也说过了&#xff0c;其实现原理就是给每一列添加相对应用的容器&#xff0c;并进行相互嵌套&#xff0c;并在…