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个

  特殊变量 $?

           $#:参数的个数

           $*:参数列表

           $@:参数列表


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

$1:/etc/fstab

$2:/etc/inittab


练习:写一个脚本

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

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

#!/bin/bash

#

echo $#

echo $*

echo $@

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]."





















本文转自飞行萌51CTO博客,原文链接:http://blog.51cto.com/8527508/1941157 ,如需转载请自行联系原作者




相关文章
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
527 6
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
Shell Linux 开发工具
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
481 12
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
Shell
Shell编程(下)
Shell编程(下)
281 1
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
277 1
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
371 12
|
Shell KVM 虚拟化
Shell 数组编程
【8月更文挑战第22天】 Shell 数组编程
298 10