4.Shell 判断用户的参数

1.Shell 判断用户的参数

  系统在执行mkdir命令时会判断用户输入的信息,即判断用户指定的文件夹名称是否已经存在,如果存在则提示报错;反之则自动创建。

  Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值。

条件测试语法:的执行格式如图4-16所示。切记,条件表达式两边均应有一个空格

  

  按照测试对象来划分,条件测试语句可以分为4种:

文件测试语句;

逻辑测试语句;

整数值比较语句;

字符串比较语句。

  文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符,具体的参数如表4-3所示:

操作符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行

2:实例

  下面使用文件测试语句来判断/etc/fstab是否为一个目录类型的文件,然后通过Shell解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为0,则目录存在;

如果返回值为非零的值,则意味着目录不存在:

[[email protected] ~]# [ -d /etc/fstab ]
[[email protected] ~]# echo $?
1

  再使用文件测试语句来判断/etc/fstab是否为一般文件,如果返回值为0,则代表文件存在,且为一般文件:

[[email protected] ~]# [ -f /etc/fstab ]
[[email protected] ~]# echo $?
0

  逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。例如在Shell终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令,

因此可以用来判断/dev/cdrom文件是否存在,若存在则输出Exist字样。

[[email protected] ~]# [ -e /dev/cdrom ] && echo "Exist"
Exist

  除了逻辑“与”外,还有逻辑“或”,它在Linux系统中的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前登录

的用户是否为非管理员身份:

[[email protected] sh]# echo $USER
root
[[email protected] sh]#  [ $USER = root ] || echo "user"
[[email protected] sh]# su - hadoop
[[email protected] ~]$ [ $USER = root ] || echo "user"
user

  第三种逻辑语句是“非”,在Linux系统中的运算符号是一个叹号(!),它表示把条件测试中的判断结果取相反值。也就是说,如果原本测试的结果是正确的,则将其变成错误的;

原本测试错误的结果则将其变成正确的。

[[email protected] ~]$ exit
logout
[[email protected] root]# [ $USER != root ] || echo "administrator"
administrator

  先判断当前登录用户的USER变量名称是否等于root,然后用逻辑运算符“非”进行取反操作,效果就变成了判断当前登录的用户是否为非管理员用户了。最后若条件成立则会根据逻

辑“与”运算符输出user字样;或条件不满足则会通过逻辑“或”运算符输出root字样,而如果前面的&&不成立才会执行后面的||符号。

[[email protected] ~]# [ $USER != root ] && echo "user" || echo "root"
root

  使用规范的整数比较运算符来进行操作数字,不能将数字与字符串、文件等内容一起操作

操作符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于

  我们先测试一下10是否大于10以及10是否等于10(通过输出的返回值内容来判断):

[[email protected] ~]# [ 10 -gt 10 ]
[[email protected] ~]# echo $?
1
[[email protected] ~]# [ 10 -eq 10 ]
[[email protected] ~]# echo $?
0

  free命令,它可以用来获取当前系统正在使用及可用的内存量信息。接下来先使用free -m命令查看内存使用量情况(单位为MB),然后通过grep Mem:命令过滤出剩余内存量的行,

再用awk ‘{print $4}‘命令只保留第四列,最后用FreeMem=`语句`的方式把语句内执行的结果赋值给变量

[[email protected] ~]# free -m
            total     used     free     shared     buffers     cached
Mem:        1826      1244     582      9          1           413
-/+ buffers/cache:    830 996
Swap:       2047      0        2047
[[email protected] ~]# free -m | grep Mem:
Mem:        1826      1244     582      9
[[email protected] ~]# free -m | grep Mem: | awk ‘{print $4}‘
582
[[email protected] ~]# FreeMem=`free -m | grep Mem: | awk ‘{print $4}‘`
[[email protected] ~]# echo $FreeMem
582

  我们使用整数运算符来判断内存可用量的值是否小于1024,若小于则会提示“Insufficient Memory”(内存不足)的字样:

[[email protected] ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
Insufficient Memory

  字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。它经常用来判断某个变量是否未被定义(即内容为空值),理解起来也比较简单。

字符串比较中常见的运算符如表4-5所示:

操作符 作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空

  接下来通过判断String变量是否为空值,进而判断是否定义了这个变量:

[[email protected] ~]# [ -z $String ]
[[email protected] ~]# echo $?
0

  再尝试引入逻辑运算符来试一下。当用于保存当前语系的环境变量值LANG不是英语(en.US)时,则会满足逻辑测试条件并输出“Not en.US”(非英语)的字样:

[[email protected] ~]# echo $LANG
en_US.UTF-8
[[email protected] ~]# [ $LANG != "en.US" ] && echo "Not en.US"
Not en.US

  

原文地址:https://www.cnblogs.com/yaboya/p/9085012.html

时间: 2024-11-06 03:46:23

4.Shell 判断用户的参数的相关文章

shell判断输入变量或者参数是否为空

判断变量 read -p "input a word :" word if  [ ! -n "$word" ] ;then echo "you have not input a word!" else echo "the word you input is $word" fi 判断输入参数 #!/bin/bash if [ ! -n "$1" ] ;then echo "you have not

shell判断用户

if [ `whoami` = "XXX" ] then #echo "[用户检测ok]当前执行用户为XXX,脚本继续执行" echo "" else echo "[用户检测fail]$kkk项目部署ERROR,当前用户为`whoami`,必须使用XXX 用户执行,脚本退出执行!" exit 1 fi

linux[基础]16-shell判断用户参数[01]

Shell判断用户参数 条件测试语句能够测试特点的表达式是否成立 当条件成立时返回值为0 否则返回其他数值 测试语句格式: [ 条件表达式 ] 两侧均应有一个空格 测试语句有: 文件测试 逻辑测试 整数值比较 字符串比较   文件测试: [ 操作符 文件或目录名 ] 参数 作用 -d 测试是否为目录 -e 测试文件或目录是否存在 -f 判断是否为文件 -r 测试当前用户是否有权读 -w 测试当前用户是否可写 -x 测试当前用户是否可执行 实例: [[email protected] ~]# [

【shell】Linux shell 之 判断用户输入的变量是否为数字

本文内容:判断用户输入的参数是否为数字 在shell中如何进行计算? 方式一 [[email protected] scripts]# echo $((1+2)) 3 方式二 [[email protected] scripts]# expr 2 + 3 5 [[email protected] scripts]# 注意:使用方式二的时候,要求必须要有间隔.如果使用的是乘法,号必须进行转义写为 \ [[email protected] scripts]# expr 2 * 3 expr: 语法错

【shell脚本练习】判断用户存在和用户类型

题目 写一个脚本 1. 传递一个参数给脚本,此参数为用户名: 2. 如果用户存在,则执行如下任务 * 如果用户的id号小于500,显示其为管理员或系统用户: * 否则,显示其为普通用户: 3. 如果用户不存在,则添加之: 解答 #!/bin/bash username=$1 if [ "$username" = "" ]; then echo "please input a username" exit 1 fi if id $username

Python(66)_判断用户传入的参数str中计算数字,字母,空格,以及其他的个数,并返回结果

#-*-coding:utf-8-*- ''' 写函数,判断用户传入的参数str中计算数字,字母,空格,以及其他的个数,并返回结果 ''' content = input('>>>') def func(s): num = 0 alpha = 0 space = 0 others = 0 dic ={ 'num':0, 'alpha':0, 'space':0, 'other':0 } for i in s: if i.isdigit(): dic['num'] +=1 elif i.i

shell判断和比较

http://blog.chinaunix.net/uid-7553302-id-183648.html 1  shell 的$! ,$?, $$,[email protected] $n        $1 the first parameter,$2 the second... $#        The number of command-line parameters. $0        The name of current program. $?        Last comma

shell判断文件,目录是否存在或者具有权限 (转载)

转自:http://cqfish.blog.51cto.com/622299/187188 文章来源:http://hi.baidu.com/haigang/blog/item/e5f582262d639c118b82a167.html #!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/access.log" #这里的-x 参数判断$myPath是否存在并且是否具有可执行权限 if [ ! -x &

shell 判断文件、目录是否存在

shell判断文件是否存在 1. shell判断文件,目录是否存在或者具有权限 2. #!/bin/sh 3. 4. myPath="/var/log/httpd/" 5. myFile="/var /log/httpd/access.log" 6. 7. # 这里的-x 参数判断$myPath是否存在并且是否具有可执行权限 8. if [ ! -x "$myPath"]; then 9. mkdir "$myPath" 10