shell经典面试题根据文件创建用户名及密码(亲测)

2023-11-13

转载来源 :shell经典面试题根据文件创建用户名及密码 : https://www.jianshu.com/p/eeb455eef7ca

01 前言

shell脚本已经学习了很长一段时间了,现在时不时来看一些经典的面试题,复习一些常用知识点,温故知新,为明天做准备~

02 根据文件内容创建用户名及密码

背景:写一个脚本,满足一下需求及应用,如一个文件的内容如下,根据文件内容实现批量创建用户,第一列为用户名,第二列为密码
在这里插入图片描述
在这里插入图片描述
测试文件test.list
这个题目相信大家都很熟悉了,面试甚至是实际工作应用当中都会经常用到

今天我们来看看实现思路。

第一步:按行读取文件,推荐用while read line 的模式

先写脚本框架
在这里插入图片描述
while read line 按行读取文件
第二部:将用户名和密码分别取出来,并赋值给变量
这里用awk实现
在这里插入图片描述
取出用户名、密码列并赋值
第三步:创建用户用useradd,同步创建密码可以用非交互式实现,即
在这里插入图片描述
创建用户名及密码
第四步:考虑几种特殊情况

万一要创建的用户本来就存在呢?所以应加个判断,用户存在不做操作,用户不存在再执行
在这里插入图片描述
考虑用户已存在的情况
还有,创建用户操作只有root账户有权限,所以一开始就应该判断当前用户是不是root

判断用户是不是root
脚本就写好啦,执行一下看看效果:

测试效果
可以看到,用户和密码都已成功创建,但是id判断用户时有不想看到的输出,再改一下,完整的脚本如下:

#!/bin/bash
while read i
do
  user=`echo $i | awk '{print $1}'`
  pass=`echo $i | awk '{print $2}'`

  id $user || useradd $user
  echo $pass | passwd $user --stdin

done < test.list

在这里插入图片描述
完整脚本
再次执行,就不会有用户不存在这条无须存在的输出了

03 总结

这是一个工作和面试都非常经典的案例,知识点总结如下:

3.1 判断用户是否为root,echo $UID ,root账户为0,其余非0

3.2 按行读取文件,while read line 模式

3.2 判断用户是否存在,id user

3.4 非交互式创建用户名及密码 echo ****** | passwd user --stdin

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell经典面试题根据文件创建用户名及密码(亲测) 的相关文章

  • shell脚本中的\r字符

    我在尝试执行 shell 脚本时收到以下错误 r command not found line 2 请提出同样的解决方案 以下是脚本中使用的初始行 bin sh if lt 1 then echo ERROR Environment arg
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud
  • 如何使用shell脚本从json字符串中grep特定字段值[重复]

    这个问题在这里已经有答案了 下面是文件中可用的 JSON 字符串 我需要从中提取值status在 shell 脚本中 预期输出 status success 响应 json eventDate null dateProccessed nul
  • 从 UNIX 命令行向串行端口发送字节?

    我想使用命令行将字节流发送到串行端口 这可能吗 我的串口位于 dev cu usbserial A700dYoR在我的 Mac 上 例如 如果我想将整数 50 或字符串 data 发送到该串行端口 我该怎么做 我对 UNIX 的了解非常有限
  • 分叉/多线程进程|重击

    我想让我的代码的一部分更加高效 我正在考虑让它分叉成多个进程 并让它们一次执行 50 100 次 而不是只执行一次 例如 伪 for line in file do foo foo2 foo3 done 我希望这个 for 循环运行多次 我
  • 符合 POSIX 标准的 shell 相当于 Bash“while read -d $'\0' ...”?

    我正在尝试使 Bash 脚本严格符合 POSIX 标准 即消除任何潜在的 Bashisms http mywiki wooledge org Bashism 通过使用checkbashisms px script filename 在给定的
  • 每个命令都返回“bash:<命令>:找不到命令...”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我刚刚安装了 Scala 并添加了路径gedit bashrc export SCALA HOME home avijit sca
  • GNU 并行与 rsync

    我正在尝试运行一些实例rsync并行使用ssh with GNU parallel 我正在运行的命令是这样的 find tmp tempfolder type f name chunck sort parallel gnu j 4 v ss
  • Bash 参数引号和 eval

    我编写了一个 bash 日志记录库 用我公司当前正在使用的一些复杂脚本来实现 在进行日志调用时 我一直致力于提供调用脚本的脚本文件名 BASH SOURCE 和行号 LINENO 但是 我不想依赖用户或实现脚本来将这两个变量作为参数传递 如
  • 如果未设置,则从控制台读取 Makefile 变量

    我正在更新一个从外部源访问某些资源的 Makefile 即存在以下形式的规则 External cvs up 对于不受限制的资源 它可以按预期工作 现在 出现了功能漂移 外部资源需要更复杂的登录 因此规则已更改为与此没有太大不同的内容 Ex
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • awk 返回两个变量

    现在这就是我正在做的事情 ret ls la awk print 3 9 usr echo ret awk print 1 fil echo ret awk print 2 问题是我没有运行ls我正在运行一个需要时间的命令 因此您可以理解其
  • adb shell 输入带有空格的文本

    如何发送带有空格的文本 例如 一些文字 using adb shell input text 找到以下解决方案 adb shell input text some stext 工作正常 但是有什么简单的方法可以用 s 替换空格吗 Examp
  • 在 C# 中编写批处理脚本的好方法是什么?

    我想用 C 编写简单的脚本 我通常会使用 bat 或 4NT btm 文件 复制文件 解析文本 询问用户输入等等 相当简单 但在批处理文件中正确执行这些操作确实很困难 例如没有例外 我熟悉像 AxScript 这样的命令行 脚本 包装器 这
  • 带有二进制数据的 Bash echo 命令?

    有人可以解释一下为什么这个脚本有时只返回十六进制字符串表示形式的 15 个字节吗 for i in 1 10 do API IV openssl rand 16 API IV HEX echo n API IV od vt x1 w16 a
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 将变量插入 sh 脚本命令[重复]

    这个问题在这里已经有答案了 bin sh f set proj dir OutputDir for projname in lib proj1 proj2 do mv scripts projname BYTECODE proj dir s
  • 从命令行更改 konsole 选项卡标题并使其持久?

    如何更改 konsole 选项卡标题 默认情况下 它设置为 u n 所以它总是自动改变 我可以这样设置 qdbus org kde konsole KONSOLE DBUS SESSION setTitle 1 My Title 但是一旦您

随机推荐

  • 09_Uboot启动流程_1

    目录 链接脚本u boot lds详解 U Boot启动流程详解 reset函数源码详解 lowlevel init函数详解 s init函数详解 链接脚本u boot lds详解 要分析uboot的启动流程 首先要找到 入口 找到第一行程
  • ABAP 基础语法

    表的声明的格式为 tables 表名 变量定义 其中 v1是变量名 l 是变量的长度 t是数据类型 d是小数位 xxx 是缺省值 data v1 l type t decimals d value xxx 定义了一个10位长度3位小数缺省值
  • 多年收集的一些稀有软件1

    QQ 365543212 PTC系列产品 PTC Creo 5 0 1 0 HelpCenter Full Multilanguage Win64 2DVD PTC Creo 4 0 M050 HelpCenter Full Multila
  • mysql 锁级别说明 一

    1 锁的类型 MySQL各存储引擎使用了三种类型 级别 的锁定机制 表级锁定 行级锁定和页级锁定 锁级别 存储引擎 表级别 table level MyISAM MEMORY CSV 行级别 row level inndb 页级别 page
  • Docker Compose初体验(Centos7中docker-compose安装MySQL+Redis)

    一 docker compose介绍 官网介绍 Compose 是用于定义和运行多容器 Docker 应用程序的工具 通过 Compose 您可以使用 YML 文件来配置应用程序需要的所有服务 然后 使用一个命令 就可以从 YML 文件配置
  • 为什么说 Serverless 是云的未来?

    简介 对于大多数应用而言 借助 Serverless 服务 开发者可以将绝大多数精力投入在业务逻辑的开发整合上 大大缩短开发周期 降低运维成本 有人说 Serverless 正在改变未来软件开发的模式和流程 它就是云计算的未来 技术领域真正
  • Vue 生命周期和数据共享

    Vue 生命周期和数据共享 1 组件的生命周期 1 1 生命周期与生命周期函数 1 2 组件生命周期函数的分类 1 3 生命周期图示以及详解 2 组件之间的数据共享 2 1 组件之间的关系 2 2 父向子传值 2 3 子向父传值 2 4 兄
  • 降低指定进程的CPU占用率(适合游戏多开)

    应用场景举例 推荐BES软件 应用场景举例 游戏多开 比如 天书世界 网页游戏 单开占用CPU30 左右 最小化能够降低到10 以下 如果多开 那么CPU就是叠加累计 非常占用CPU资源 而且挂机严重影响CPU温度 1 采用最小化窗口的方式
  • CV综述目标检测整理---目录

    CV综述目标检测整理 目录 Object detection yolo系列 yolov3 从yolo入门目标检测 链接 YOLOV3论文解读与应用 https blog csdn net weixin 42466194 article de
  • codeforces 733D--Kostya the Sculptor

    Description Kostya is a genial sculptor he has an idea to carve a marble sculpture in the shape of a sphere Kostya has a
  • 威胁情报

    2020 05 01 引言 之前总是看到各种威胁情报 各种乱七八糟的定义 各种什么高级的词汇 什么上下文 什么攻击 统统看不懂 但是你去搜索威胁情报 国内几家比较知名的 或者说国外的 发现他们的网站提供的服务 就是IP 域名 文件检测这些内
  • MyEclipse报错:Multiple markers at this line

    Multiple markers at this line The type java io ObjectInputStream cannot be resolved It is indire 出错原因 jdk版本太高 不兼容而引起的问题
  • 大数据好不好学,有这几大步骤你就懂了

    很多初学者在萌生向大数据方向发展的想法之后 不免产生一些疑问 应该怎样入门 应该学习哪些技术 学习路线又是什么 所有萌生入行的想法与想要学习Java的同学的初衷是一样的 岗位非常火 就业薪资比较高 前景非常可观 基本都是这个原因而向往大数据
  • 安卓逆向入门指南:修改与重打包应用

    安卓逆向入门指南 修改与重打包应用 概述 介绍修改与重打包应用的目的和应用场景 强调合法性和道德准则 在逆向工程过程中需要遵守相关法律法规 理解应用结构与资源 APK文件结构 解释APK文件的基本结构 包括AndroidManifest x
  • Spring Boot2.x 整合lettuce redis 和 redisson

    前言 springboot2之前redis的连接池为jedis 2 0以后redis的连接池改为了lettuce lettuce能够支持redis4 需要java8及以上 lettuce是基于netty实现的与redis进行同步和异步的通信
  • 基于RFID技术的预制件管理系统的开发

    1 简介 随着计算机 通讯技术和消费电子产品 正如人们通常所知的3C数码产品 的到来 已经在人们生活的各个领域带来了改变 通过这些3C技术 在将来 信息的传播和获取将变得更加便利 电子化管理技术正在向移动管理概念转变 射频识别系统 RFID
  • 微信支付官方SDK PHP版本接入记录

    1 下载证书 下载商家支付证书 这里忽略步骤 下载的证书我们放在E wwwroot certs wx 目录下 一共有4个文件 apiclient cert p12 apiclient cert pem apiclient key pem 证
  • [linux-022]ubuntu20.04用virtualbox安装64位win10彻底解决“directory ezboot not found”问题

    1 这问题是由于win10的iso文件超过4g导致的 2 解决关键 需要一个小尺寸的能用winpe启动的iso镜像 这个镜像有磁盘分区工具和ghost 3 在virtualbox创建win10 64虚拟机 硬盘50g 4 给这个虚拟机挂上两
  • PHP 之session cookie

    cookie和session有什么用 常见的用法 比如在有些网站下载东西需要会员先登陆 http协议本身是无状态的 无法得知顾客是否已经登陆 怎么办呢 cookie和session就可以知道 再比如网上购物 用户身份认证 程序状态记录 购物
  • shell经典面试题根据文件创建用户名及密码(亲测)

    转载来源 shell经典面试题根据文件创建用户名及密码 https www jianshu com p eeb455eef7ca 01 前言 shell脚本已经学习了很长一段时间了 现在时不时来看一些经典的面试题 复习一些常用知识点 温故知