6.1 shell编程4

6.1

给定一个用户,判断其UID和GID是否一样 "^$USERNAME\>"(行首第一个单词)

如果一样,就显示此用户为"good guy";否则,就显示此用户为"bad guy"

#!/bin/bash

#

USERNAME =user1

if !grep "^$USERNAME\>" /etc/passwd &> /dev/null;then 用户不存在

echo "No such user: $USERNAME."

exit 1

fi

USERID = `id -u $USERNAME`

GROUPID =`id -g $USERNAME`

if[ $USERID -eq $GROUPID ];then

echo "good guy"

else

echo "bad guy"

fi

exit: 退出脚本

exit #(#代表数字)

bash中常用的条件测试三种

-gt

-le

-ne

-ge

-lt

-eq               非0值都是假

--------------------只有上面才能用[],其他表达式中不能出现[]

INT1 = 63

INT2 = 77

[ $INT1 -eq $INT2 ]

[[ $INT1 -eq $INT2 ]]

TEST $INT1 -eq $INT2

if [ `grep "^$USENAME\>" /etc/passwd | cut -d: -f3` -eq 0 ];then 对

if [ `grep "^$USENAME\>" /etc/passwd ` -eq 0 ];then 错(前面是一行)

测试方法

[ expression ]  bash的命令

[[ expression ]] bash关键字

test expression

文件测试:

-e FILE:测试一个文件是否存在

-f FILE:测试文件是否为普通文件

-d FILE: 测试指定路径是否为目录的

-r FILE: 测试当前用户对指定文件是否有读取权限

-w

-x FILE

[ -e /etc/initttab ]

[ -x /etc/rc.d/rc.sysinit ]

练习:写一个脚本

给定一个文件,比如/etc/inittab

判断这个文件中是否有空白行

如果有,则显示其空白行数,否则,显示没有空白行

#!/bin/bash

FILE = /etc/inittab

if [! -e $FILE ];then

echo "No $FILE."

exit 8

fi

if grep "^$" $FILE &> /dev/null;then

echo "Total blank lines: `grep "^$" $FILE | wc -l`."

else

echo "No blank line."

fi

圆整,丢弃小数点后的内容

expr命令一般用于整数值

#expr argument operator argument

练习:编写一个脚本

给定一个用户,获取其密码警告期限:

而后判断用户最近一次修改密码时间距今天是否已经小于警告期限

提示:算术运算的方法$[$A-$B]:表示变量A的值减去变量B的值的结果

如果小于,则显示"Warning":否则,就显示"OK"

#!/bin/bash

#

W=`grep "student" /etc/shadow | cut -d: -f6`

S=`date +%s`

T=`expr $S/86400`

L=`grep "^student" /etc/shadow | cut -d: -f5`

N=`grep "^student" /etc/shadow | cut -d: -f3`

SY=$[$L-$[$T-$N]]

if [ $SY -lt $W ];then

echo ‘Worning‘

else

echo ‘OK‘

fi

练习:写一个脚本

判读命令历史中历史命令的总条目是否大于1000;如果大于,则显示

"Some command will gone.";否则显示"ok"

history 当前显示缓冲区中的条数(会大于1000)

$HISTSIZE  都只显示1000

$HISTFILESIZE  都只显示1000

history | tail -l | cut -d‘ ‘ -f1 由于前面有一个空格,取不出条数,当取第二个字段

history | tail -l | cut -d‘ ‘ -f2

#!/bin/bash

#

COUNT = history | tail -l | cut -d‘ ‘ -f2

if $COUNT -gt 1000 ;then

echo "Some command will gone."

else

echo "ok"

fi

多分支的if语句

if 判断条件1;then

statement1

...

elif  判断条件2;then

statement2

...

elif  判断条件3;then

statement3

...

else 判断条件4;then

statement4

...

fi

#!/bin/bash

#

FILE =/etc/inittab

if [ -e $FILE ];then

echo "OK"

else

echo "No such file"

fi

测试脚本是否有语法错误

bash -n filetest.sh

bash -x 脚本:单步执行

给定一个文件,如果是一个普通文件,就显示之

如果是一个目录,亦显示之

否则,此为无法识别之文件

filetest2.sh

#!/bin/bash

#

FILE = /etc/rc.d/rc.sysinit

if [ ! -e $FILE ];then

echo "NO such file"

exit 6

fi

if [ -f $FILE ];then

echo "Common file"

elif [ -d $FILE ];then

echo "Directory"

else

echo "Unkown."

fi

定义脚本退出状态码

如果脚本没有明确定义退出状态码,那么,最后执行的一条命令

的退出码即为脚本的退出状态码

bash变量的类型:

本地变量(局部变量) 当前shell进程

环境变量 当前shell进程及其子进程

位置变量:$1 $2 ...

shift(踢掉一个位置值)默认踢1个

shift [n]踢掉n个

特殊变量 $?

$#:参数的个数

$*:参数列表

[email protected]:参数列表

./filetest.sh /etc/fstab /etc/inittab

$1:/etc/fstab

$2:/etc/inittab

练习:写一个脚本

能接受一个参数(文件路径)

判定:此参数如果是一个存在的文件,就显示OK ,否则显示No such file

#!/bin/bash

#

echo $#

echo $*

echo [email protected]

if[ $# -lt 1 ];then

echo "Usage: ./filetest3.sh ARG1 [ARG2 ...]"

if [ -e $1 ];then

echo "ok"

else

echo "No such file"

fi

练习:写一个脚本

给脚本传递两个参数(整数)

显示此两个参数之和,之乘积

#!/bin/bash

#

if [ $# -lt 2 ];then

echo "Usage: cac1.sh ARG1 ARG2"

exit

fi

echo "The sum is : $[$1 + $2]."

echo "The prod is : $[$1 * $2]."

时间: 2024-10-10 11:10:05

6.1 shell编程4的相关文章

老男孩新书Shell编程实战预定开始了-包邮包答疑

老男孩新书Shell编程实战预定开始了(扫图中二维码购买包邮定期包答疑),亲爱的伙伴们,让你们久等了.电脑用户猛戳 电脑购买链接 注意:包邮包3个月(2017春节后起算)Q群书籍内容答疑,等于白送书,还倒搭答疑服务. 如果觉得给力,请帮忙朋友圈.QQ群.空间转载! 活动优惠仅限本次活动,从其他渠道购买不享受此次的服务承诺. 定价 89元 基本信息 作者: 老男孩 丛书名: Linux/Unix技术丛书 出版社: 机械工业出版社 ISBN:9787111556077 上架时间:2017-1-6 出

shell编程中for,while,util,case,select,break, continue用法详解

关于shell脚本的更多详细实例讲解请参考:http://www.cnblogs.com/yuexiaxiaoxi/category/646749.html Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for.while和until.while循环和for循环属于"当型循环",而until属于"直到型循环".循环控制符:break和continue控制流程转向. 参考:<Linux 与unix shell 编程指

shell编程(七)--- sed的用法

sed:称为流编辑器,也称为行编辑器. sed处理过程:sed读取源文件中的一行,并将其放在临时缓冲区中,这个缓冲区称为模式空间,使用相应的模式对模式空间进行处理,并将处理的结果显示到屏幕上,并不会影响源文件,处理结束后,将模式空间中的内容显示至屏幕. sed格式: sed [options] 'AddressCommand' file ... options: -n:静默模式,不显示模式空间中的内容,默认显示默认空间中的内容.常和p命令一起使用. -i:直接修改源文件的内容. -e 'Addr

shell编程基础必知

shell编程 ################################################ 静态语言 动态语言 ################################################ 编程语言:机器语言,汇编语言,高级语言 ################################################ 面向对象的编程语言:sehll c 面向对象的编程语言:JAVA Python perl c++ ################

shell编程详解(一)

shell编程 语言分为: 编译型语言:先要事先转换成可执行格式 解释型语言:边解释边执行 变量:shell是弱类型编程语言,变量不需要先指明类型及初始化,而是由上下文决定类型 bash变量类型: 环境变量 本地变量 位置变量 特俗变量 本地变量:作用域为整个bash进程 VARNAME=value 局部变量:作用域当前代码 local VARNAME=value 环境变量:作用域为当前shell进程及子进程 export VARNAME=value 条件判断 hash中如何实现条件判断? 条件

linux shell编程

1.什么是shell 2. 还是hello world程序 3. shell中的变量 3.1 系统变量 3.2 用户定义变量 3.2.1 用户定义变量规则 3.2.3 shell如何使用变量 3.2.3 全局变量 vs 局部变量 4. shell编程中的控制结构 4.1 条件判定 4.1.1 简单条件判定 4.1.2 组合判定 4.2  if - else 4.3 for 4.4 while 4.5 case 5. shell中的函数 5.1 函数声明和定义 5.2 函数调用 6. shell脚

centos shell编程4【分发系统】 第三十八节课

centos shell编程4[分发系统]  第三十八节课 http://www.cnblogs.com/MYSQLZOUQI/p/4811790.htmlmkpasswd 生成密码的工具,安装 expect包 yum install -y expect 上半节课 下半节课 f

第三章 shell编程之运算符

shell编程之运算符 一 shell变量的缺点 弱类型: 默认字符串型: 二 declare声明变量类型 格式:declare [+/-][选项] 变量名 -:给变量设定类型属性: +:取消变量的类型属性: -a:将变量声明为数组型:

shell编程基础

for c in a b c d e f g;do echo $c; done 按顺序输出 for c in a b c d e f g;do tar czvf install.log.$c.tar.gz install.log ; done for c in {a..g}; do echo $c; done 和上面的一样 seq 1 10 列数字的 for i in {1..10}; do echo $i; done 字符串变量实例str='I love linux. I love unix

Linux Shell编程入门

从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作.在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用.深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一. Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh).Bourne