Shell编程入门(第二版)(中)
来源:互联网 发布:社交行为数据挖掘 编辑:程序博客网 时间:2024/05/15 05:10
变量测试语句-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 filethen....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" ]then echo "Apache is running..."else echo "Apache is NOT running..." /etc/rc.d/init.d/httpd startfi
流程控制语句
流控制语句:用于控制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 ]then echo "Script: /etc/rc.d/init.d/httdp have x power!" /etc/rc.d/init.d/httpd restartfi
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 ]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/elifif [ $# -ne 2 ] thenecho "Not enough parameters"exit 1fiif [ $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 Saturdaydo 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、检测系统中密码为空的用户
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 1fi/bin/echo# list /etc/passwd infouserinfo=`/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 infogroupinfo=`/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 membersgroups=`/usr/bin/groups $username`/bin/echo $groups/bin/echo# get online infoonline=`/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 Linuxusername=$1killpid=`/bin/ps aux | grep $username | awk '{print $2}'`for PID in $killpiddo /bin/kill -9 $PID 2> /dev/nulldone
- Shell编程入门(第二版)(中)
- Shell编程入门(第二版)(上)
- Shell编程入门(第二版)(下)
- shell编程--第二天
- shell编程第二讲
- linux shell编程五步拳(张迅雷闪击shell系列) 第二集 shell编程基本语法快速入门
- Windows Shell 编程 第二章
- Windows Shell 编程 第二章
- Windows Shell 编程 第二章
- 编程入门三部曲:第二步 向表单中增加控件
- TCSH shell 编程入门
- TCSH shell 编程入门
- csh shell编程入门
- TCSH shell编程入门
- shell编程快速入门
- shell编程入门
- shell编程:入门例子
- Linux Shell编程入门
- Cocos2d-X 愤怒的小鸟实现----加载页面(一)
- 学习笔记一:在VS2013下配置OpenCV3.0并运行SIFT(原来版本为VS2010下的OpenCV2.2)
- leetcode-Palindrome Partitioning
- DXT纹理压缩
- HDU5045Contest(记忆化搜索)
- Shell编程入门(第二版)(中)
- 大三第三个星期
- HDU 5055 Bob and math problem
- deepin下安装jdk
- 用STL中的map实现的字符串中各个字符出现的次数
- linux
- stm32时钟
- Mac OS使用技巧之十四:自定义文件图标
- 详解android:scaleType属性