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 not

web=$(/usr/bin/pgrep httpd)

echo "Now let‘s test the Apache..."
echo

#if [ "$web" != "" ]
if [ -n "$web" ]
then
    echo "Apache is running..."
else
    echo "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/then

if [ -x /etc/rc.d/init.d/httpd ]
then
    echo "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 条件2
	then
		命令2
	else
		命令3
	fi 

多个条件的联合:

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

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

演示样例-if_else.sh

#!/bin/bash
# A test shell script for if/elif/else

echo -n "Please input a filename: "
read filename

if [ -d $filename ]
then
    echo "$filename is a directory"
elif [ -f $filename ]
then
    echo "$filename is a commen file"
elif [ -c $filename -o -b $filename ]
then
    echo "$filename is a device file"
else
    echo "$filename is a unkown file"
fi

演示样例-if_elif_exit.sh

#!/bin/bash
# A test shell script for if/elif

if [ $# -ne 2 ]
then
echo "Not enough parameters"
exit 1
fi

if [ $1 -gt $2 ]
then
    echo "$1 is great then $2"
elif [ $1 -lt $2 ]
then
    echo "$1 is little then $2"
else
    echo "$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
do
    echo "The day is $DAY"
done

awk命令[分段提取]

awk -F域分隔符 ‘命令’[单引號] #假设不用-F指定切割符,默觉得空格

1、检測系统中UID为0的用户

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

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

-F: 指定切割附为:

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

2、检測系统中password为空的用户

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/null

if [ $? -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" ]
then
    echo "$username is not online"
else
    echo "$username is online..."
fi

实例-killuser.sh

#思路:将一个用户全部的进程包含shell都关闭,则相当于将该用户踢出了系统
#!/bin/bash
# A shell sript to kill a user in Linux

username=$1

killpid=`/bin/ps aux | grep $username | awk ‘{print $2}‘`

for PID in $killpid
do
    /bin/kill -9 $PID 2> /dev/null
done
时间: 2024-10-12 08:01:57

Shell编程入门(第二版)(中)的相关文章

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

简单的示例Shell程序 示例1. #!/bin/bash #This is to show what a shell script looks like echo "Our first example" echo # This inserts an empty line in output. echo "We are currently in the following directory." /bin/pwd echo echo "This direc

Linux下的shell编程入门

通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应.一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率.要达到这样的目的,通常我们利用shell程序或者shell脚本来实现. 一.简介 Shell编程有很多类似C语言和其他程序语言的特征,但是又没有编程语言那样复杂.Shell程序就是放在一个文件中的一系列Linux命令和实用程序,在执行的时候,通过Linux一个接着一个地解释和执行每个命令. 下面我们来看一个简单的shell程序: 1.首先建立一个

Python核心编程(第二版) 第六章习题答案

6–1.字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? 答:有,string.find(str,beg,end) 6–2.字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来帮你. 1 #!/usr/bin/python 2 3 import string 4 impo

Python核心编程(第二版) 第四章习题答案

4-1.Python对象.与所有Python对象有关的三个属性是什么?请简单的描述一下.答:与所有Python对象有关的三个属性是身份.类型.值.身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到.这个值可以被认为是该对象的内存地址.类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么规则.可以用内建函数type()来查看Python的类型.值:对象表示的数据项.4-2.类型.不可更改(immutable)指的是什么?Pyth

shell 编程入门,一些简单符合命令

shell 编程入门 1,,shell 特性 linux预设保存1000条输入过的命令,存于 .bash_history . (1,) !! 表示执行上一条命令 #pwd /root #!! pwd /root (2) !n ,n表示数字,表示执行历史第n条指令,例如!1002 #history |grep 1002 1002 pwd #!1002 pwd /root (3)!字符串,表示执行命令历史中最近一次以 pw 开头的命令 #!pw pwd /root (4)alias 自定义命令的别名

linux运维、架构之路-shell编程入门

一.shell编程入门必备基础 1.vim编辑器的命令,vimrc设置 2.150个linux基础命令 3.linux中基础的系统服务crond,ssh网络服务,nfs,rsync,inotify,lnmp,sersync,nmap等 二.变量分类 1.全局变量 [[email protected] ~]# env HOSTNAME=nfs-server TERM=linux SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=172.19.5.146 49184

Python核心编程(第二版) 第二章习题答案 未完待续

2-2.程序输出.阅读下面的Python脚本.#!/usr/bin/env python1 + 2 * 4(a)你认为这段脚本是用来做什么的?(b)你认为这段脚本会输出什么?(c)输入以上代码,并保存为脚本,然后运行它,它所做的与你的预期一样吗?为什么一样/不一样?(d)这段代码单独执行和在交互解释器中执行有何不同?试一下,然后写出结果.(e)如何改进这个脚本,以便它能和你想象的一样工作?答:(a)这段脚本是用来计算表达式的值(b)脚本会输出9(c)保存为脚本,运行后没有输出.和自己预期不一样.

centos shell编程6一些工作中实践脚本 第四十节课

centos   shell编程6一些工作中实践脚本    第四十节课 上半节课 下半节课 f

Python核心编程(第二版)勘误

最近在网上买了本Python核心编程(第二版)中文版,刚看了几章,上机练习了几个程序,发现印刷有问题,不知道是什么原因.网上搜索了一番,发现其他网友也有发现类似问题.这里把我遇到的有问题的程序贴出来,以记录自己学习的过程. 第52页程序范例makeTextFile.py #!/usr/bin/python 'makeTextFile.py -- create text file' import os ls = os.linesep # get filename while True:     f