Linux Bash Shell练习

Linux Bash Shell练习

1、写一个脚本,完成以下功能:

假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干

显示所有以K开头的文件的文件名,并且给其附加一个stop字符串

显示所有以S开头的文件的文件名,并且给其附加一个start字符串

分别统计S开头和K开头的文件各有多少

#!/bin/bash
#
for i in $(ls /etc/rc.d/rc3.d/ | grep  "\<K");do
    echo $i.stop
    let sum1+=1
done

for j in $(ls /etc/rc.d/rc3.d/ | grep "\<S");do
    echo $j.start
    let sum2+=1
done

echo "There are $sum1 file names start with "K"."
echo "There are $sum2 file names start with "S"."

执行效果:

shell-2205.jpg

2、写一个脚本,完成以下功能:

脚本能接受用户名作为参数

计算这些用户的ID之和

#!/bin/bash
#
[ $# -eq 0 ] && echo "Please give one user name or more." && exit 1

for i in $*;do
    for j in $(id -u $i);do
        let sum+=$j
    done
done

echo "Sum:$sum."

运行效果:

shell-2237.jpg

 

3、写一个脚本:

传递一些目录给此脚本

逐个显示每个目录的所有一级文件或子目录的内容类型

统计一共有多少个目录;且一共显示了多少个文件的内容类型

#!/bin/bash
#
[ $# -eq 0 ] && echo "At least give one file path." && exit 1

for j in  $*/*;do
    if [ -b $j ];then
        echo "$j is block file."
        let sum1+=1
    elif [ -c $j ];then
        echo "$j is character file."
        let sum1+=1
    elif [ -d $j ];then
        echo "$j is a directory."
        let sum+=1
    elif [ -f $j ];then
        echo "$j is a common file."
        let sum1+=1
    elif [ -L $j ];then
        echo "$j is a symbolic link."
        let sum1+=1
    elif [ -p $j ];then
        echo "$j is a pipe file."
        let sum1+=1
    elif [ -S $j ];then
        echo "$j is a socket file."
        let sum1+=1
    else
        echo "$j is unknown file."
        let sum1+=1
    fi
done

let sum2=$sum+$sum1

echo "There are $sum directories."
echo "There are $sum2 files and directories."

运行效果:

shell-1439.jpg

 

4、写一个脚本

通过命令行传递一个参数给脚本,参数为用户名

如果用户的id号大于等于500,则显示此用户为普通用户

#!/bin/bash
#
[ $# -eq 0 ] && echo "At least one user name needed." && exit 1

for i in $*;do
    if ! id $i &>/dev/null ;then
        echo "No such user:$i" 
    elif [ $(id -u $i) -ge 500 ];then
        echo "$i is a common user."
    fi
done

运行效果:

shell-1629.jpg

5、写一个脚本

添加10用户user1-user10,密码同用户名

用户不存在时才添加,存在时则跳过

最后显示本次共添加了多少用户

 

#!/bin/bash
#
declare -i sum=0

for i in {1..10};do
    if id user$i &>/dev/null;then
        echo "User user$i is exist."
    else
        useradd user$i &>/dev/null
        echo "user$i" | passwd --stdin "user$i" &>/dev/null
        echo "User user$i add finished."
        let sum+=1
    fi
done 

echo "There are $sum users added."

shell-1707.jpg

原创文章,作者:N24_lantian,如若转载,请注明出处:http://www.178linux.com/63944

(1)
上一篇 2016-12-17 20:45
下一篇 2016-12-17 22:34

相关推荐

  • MHA–master在线修复

    本次实验基于【MHA+keepalive 高可用MYSQL集群】(续) 一、恢复背景 二、修复故障节点及MHA集群 三、提升已修复的节点为master 四、注意事项 一、恢复背景 1、设备清单 2、:percona-xtrabackup-2.3.2 (注:生产环境应定时备份;不应等到数据库DOWN后才备份,以免加剧集群的压力) 备份数据库操作: [root@…

    2017-03-01
  • Linux文件系统

    Linux文件系统 根目录下的文件 / ├── bin 存放用户使用的基本命令(可执行程序,二进制文件) 不能单独分区的 ├── boot 跟内核有关的文件 grub 内核和BootLoader ├── cgroup 用来资源限制资源隔离 docker 容器化 ├── dev device 设备文件 b block device 块设备 硬盘或者CD-rom…

    Linux干货 2017-04-01
  • five

    1;显示当前系统上root, fedora或user1用户的默认shell。 #   grep "^\(root\|fedora\|user1\)" /etc/passwd #   grep -E "^(root|fedora|u…

    Linux干货 2017-01-16
  • 文件压缩,解压缩及归档

        在Linux的环境中,压缩文件的扩展名大多是:“*.tar, *.tar.gz, *.gz, *.Z, *.bz2, *.xz”,因为 Linux 支持的压缩指令非常多,且不同的指令所用的压缩技术并不相同,当然彼此之间可能就无法互通压缩/解压缩文件,当你下载到某个压缩文件时,自然就需要知道该文件是由哪种压缩指令…

    Linux干货 2016-08-18
  • Linux程序包管理rpm

    CentOS系统上rpm命令管理程序包: 安装、卸载、升级、查询、校验、数据库维护  安装: rpm {-i|–install} [install-options] PACKAGE_FILE … -v: verbose -vv: -h: 以#显示程序包管理执行进度;每个#表示2%的进度  rpm -ivh PACK…

    Linux干货 2015-06-21
  • 数组,字符串处理,mktemp命令,install命令,bash的环境配置文件,程序包编译

    数组 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合。 数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持。 bash的数组支持稀疏格式(索引不连续) 声明数组: declare -a ARRAY_NAME(普通数组可以不加声…

    Linux干货 2016-08-24

评论列表(1条)

  • 马哥教育
    马哥教育 2016-12-23 00:45

    赞,几个脚本完成的不错~能注意下整体风格会更好~~继续加油~