Linux脚本练习之script058-传递一个用户名参数给脚本,如果用户的 id 号大于等于 500,且其默认 shell 为以 sh 结尾的字符串,则显示能登录否则显示无法登录系统。
  TEZNKK3IfmPf 2023年11月13日 14 0

script058

题目

写一个脚本,传递一个用户名参数给脚本:如果用户的 id 号大于等于 500,且其默认 shell 为以 sh 结尾的字符串,则显示 “a user can log system.” 类的字符串;否则,则显示无法登录系统。

分析

本题考查的知识点:

  • if...else 条件语句
  • echo 命令
  • id 命令
  • egrep 命令
  • cut 命令

思路:

  • 获取输入的参数作为用户名,注意校验参数个数。
  • 同时注意使用 id 命令校验用户名是否存在于系统中,如果不存在则退出。
  • 再接着就是利用正则表达式取匹配 /etc/passwd 文件中是否有该用户并且 Shell 以 "sh" 结尾。这里使用 egrep 命令进行检索。

Linux脚本练习之script058-传递一个用户名参数给脚本,如果用户的 id 号大于等于 500,且其默认 shell 为以 sh 结尾的字符串,则显示能登录否则显示无法登录系统。

  • 如果找到则该用户所在行则使用 cut 命令提取用户 ID。

Linux脚本练习之script058-传递一个用户名参数给脚本,如果用户的 id 号大于等于 500,且其默认 shell 为以 sh 结尾的字符串,则显示能登录否则显示无法登录系统。

  • 最后判断用户 ID 是否大于等于 500,输出对应的提示信息。

脚本

#!/bin/bash

####################################
#
# 功能:写一个脚本,传递一个用户名参数给脚本:如果用户的 id 号大于等于 500,且其默认 shell 为以 sh 结尾的字符串,则显示 “a user can log system.” 类的字符串;否则,则显示无法登录系统。
#
# 使用:直接调用脚本,不需要任何参数
#
# 作者:lcl100
#
# 日期:2022-06-04
#
####################################


# 参数校验,校验参数个数
if [ $# -ne 1 ]; then
    echo "请输入一个参数!"
    exit
fi

# 获取用户输入的用户名
username="$1"
# 应该判断用户是否存在,如果不存在则退出
id $username &> /dev/null
if [ $? -ne 0 ]; then
    echo "该用户不存在!"
    exit
fi

# 在 /etc/passwd 中文件查找该用户的用户 ID,避免正则表达式匹配多行
user_id=$(egrep "^${username}:.*sh$" /etc/passwd | cut -d ":" -f 3)

# 判断用户 ID 大于等于 500
if [ $user_id -ge 500 ]; then
    echo "a user can log system."
else
    echo "can not log."
fi

测试

执行 ./script058.sh 调用脚本。

Linux脚本练习之script058-传递一个用户名参数给脚本,如果用户的 id 号大于等于 500,且其默认 shell 为以 sh 结尾的字符串,则显示能登录否则显示无法登录系统。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   28天前   21   0   0 shellphp
TEZNKK3IfmPf