1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;

#脚本内容
[root@centos script]# cat week9_title1.sh 
#!/bin/bash
#Author Jerry
# #Display shell is nologin user's shell count 
echo "The shell is  nologin user count is $(grep -o "nologin" /etc/passwd |wc -l)"  #Display shell not's nologin user's shell count 
echo "The shell not's nologin user count is $(grep -v "nologin" /etc/passwd |wc -l)"  #测试脚本
[root@centos script]# bash week9_title1.sh 
The shell is  nologin user count is 25
The shell not's nologin user count is 7
[root@centos script]#

2、写一个脚本

(1) 获取当前主机的主机名,保存于hostname变量中;

(2) 判断此变量的值是否为localhost,如果是,则将当前主机名修改为www.magedu.com;

(3) 否则,则显示当前主机名;

[root@centos script]# cat week9_title2.sh 
#!/bin/bash
#Author Jerry
# hostname=$(hostname) if [ $hostname == "localhost" ];then
    hostname www.magedu.com
    echo "current hostname is:$hostname"
else
    echo "current hostname is:$hostname" fi
[root@centos script]#

3、写一个脚本,完成如下功能

(1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在;

(2) 如果存在,则显示此设备上的所有分区信息;

[root@centos script]# cat week9_title3.sh 
#!/bin/bash
#Author Jerry
# [ $# -lt 1 ] && echo "please atleast input on" if [ -b $1 ];then
    fdisk -l $1
else
    echo "nothing"
fi

4、写一个脚本,完成如下功能, 脚本能够接受一个参数;

(1) 如果参数1为quit,则显示退出脚本,并执行正常退出;

(2) 如果参数1为yes,则显示继续执行脚本;

(3) 否则,参数1为其它任意值,均执行非正常退出;

[root@centos script]# bash week9_title4.sh 
please input one atleast
error!!!!!
[root@centos script]# bash week9_title4.sh quit
exit....
[root@centos script]# bash week9_title4.sh yes
go!go! go! 
[root@centos script]# echo $?
0
[root@centos script]# 
[root@centos script]# cat week9_title4.sh 
#!/bin/bash
#Author Jerry
# [ $# -eq 0 ] && echo "please input one atleast" case $1 in yes)
    echo "go!go! go! "
;; quit)
    echo "exit...."
    exit 0
;; *)
    echo "error!!!!!"
    exit 2
;; esac
[root@centos script]#

5、写一个脚本,完成如下功能

传递一个参数给脚本,此参数为gzip、bzip2或者xz三者之一;

(1) 如果参数1的值为gzip,则使用tar和gzip归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.gz;

(2) 如果参数1的值为bzip2,则使用tar和bzip2归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.bz2;

(3) 如果参数1的值为xz,则使用tar和xz归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.xz;

(4) 其它任意值,则显示错误压缩工具,并执行非正常退出;

[root@www /]# cat /script/week9_title5.sh 
#!/bin/bash     if [ $# -eq 0 ];then
       echo "give me a argument,the argument is gzip bzip2 xz "
       exit 19
    fi       mkdir /backups &> /dev/null        case $1 in
       gzip)
        tar -zcvf  /backups/etc-`date +%Y%m%d`.tar.gz /etc
        ;;
       bzip2)
        tar -jvf  /backups/etc-`date +%Y%m%d`.tar.bz2 /etc
        ;;
       xz)
        tar -Jvf  /backups/etc-`date +%Y%m%d`.tar.xz /etc
        ;;
       *)
         echo "error!!!"
         ;;
       esac
[root@www /]#

6、写一个脚本,接受一个路径参数:

(1) 如果为普通文件,则说明其可被正常访问;

(2) 如果是目录文件,则说明可对其使用cd命令;

(3) 如果为符号链接文件,则说明是个访问路径;

(4) 其它为无法判断;

[root@www script]# cat week9_title6.sh 
#!/bin/bash
#Author Jerry
# #Check whether the user is to script a path parameter
[ $# -lt 1 ] && echo "Please give a path to the script parameters" if [ -f $1 ]; then     echo "这是一个普通文件,可以被正常访问" elif [ -d $1 ];then     echo "这是一个目录文件,可以使用cd命令" elif [ -h $1 ];then     echo "这是一个符号链接文件,它是一个访问路径" elif [ ! -h $1 ] && [ ! -d $1 ] && [ ! -f $1 ];then     echo "这是什么鬼,不想跟你说话并向你扔了一只狗!!!"
    exit fi

7、写一个脚本,取得当前主机的主机名,判断

(1) 如果主机名为空或为localhost,或为""(none)"",则将其命名为mail.magedu.com;

(2) 否则,显示现有的主机名即可;

#!/bin/bash
hostname=$(hostname)
if [ -z "$hostname" -o "$hostname" == "localhost" -o  "$hostname" == "none" ];then
    hostname mail.magedu.com
else
    echo "$hostname"
fi

8、写一脚本,接受一个用户名为参数;

(1) 如果用户的id号为0,则显示其为管理员;

(2) 如果用户的id号大于0且小于500, 则显示其为系统用户;

(3) 否则,则显示其为普通用户;

#!/bin/bash
if [ $# -eq 0 ];then
    echo "input argu"
    exit 1
fi
    userid=$(id -u)
if [ $userid -eq 0 ];then
    echo "admin"
elif [ $userid -gt 0 -a $userid -lt 500 ];then
    echo "system"
else
    echo "user"
fi

10、写一个脚本,传递一个用户名参数给脚本;

(1) 如果用户的id号大于等于500,且其默认shell为以sh结尾的字符串,则显示“a user can log system.”类的字符串;

(2) 否则,则显示无法登录系统;

#!/bin/bash
if [ $# -eq 0 ];then
    echo "input argu"
    exit 1
fi
    userid=grep ^$1 /etc/passwd | grep sh$ | cut -d: -f3
if [ $userid -ge 500 ];then
    echo " a user can log system"
else
    echo "nologin"
fi

11、写一个脚本,完成如下任务 :

(1) 按顺序分别复制/var/log目录下的每个直接文件或子目录至/tmp/test1-testn目录中;

(2) 复制目录时,才使用cp -r命令;

(3) 复制文件时使用cp命令;

(4) 复制链接文件时使用cp -d命令;

(5) 余下的所有类型,使用cp -a命令;"

#!/bin/bash
for i in 'ls /var/log';do
    if [ -d $i ];then
        cp -r /var/log/$i /tmp/test/test1-testn/$i
    elif [ -f $i ];then
        cp /var/log/$i /tmp/test/test1-testn/$i
    elif [ -L $i ];then
        cp -d /var/log/$i /tmp/test/test1-testn/$i
    else
        cp -a /var/log/$i /tpm/test/test1-testn/$i
    fi
done

转载请注明:linux运维部落 » 往死里苦练脚本啊啊啊啊啊啊啊~~~~~~~~~~~~~~~~

shell脚本练习【转】的更多相关文章

  1. 第一个shell脚本

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...

  2. 使用C#给Linux写Shell脚本

    在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...

  3. shell脚本规划化模板

    shell脚本规划化模板 Linux运维过程中,shell脚本是不可缺少的工具,但是每个运维人员编程的习惯都不一样,很多时候就是实现某个功能,写出来的脚本都是烂七八糟的.脚本必须规范化,应该从以后几个 ...

  4. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  5. Linux Shell脚本逻辑操作符简介

    在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...

  6. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  7. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  8. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  10. shell 脚本之循环使用 for while 详解

    任何一种编程语言中循环是比不可少的,当然 shell 脚本也少不了循环语句,包括 for 语句. while 语句.文中主要以实际用例来说明 for while 都有哪些常见的使用方法和技巧. 一.f ...

随机推荐

  1. 剑指offer:栈的压入、弹出序列

    题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该 ...

  2. 第二个Sprint ------第七天、第八天、第九天、第十天,第十一天

    这几天我们主要讨论界面的设计,也终于有了个初步的界面: 主界面截图

  3. vs安装体验

    鉴于vs都是英文,所以安装的时间实在是太长了,经过4个小时终于装完了. 首先要下载和安装Unit Test Generator.步骤为:tools->Extensions and Updates ...

  4. ElasticSearch 2 (17) - 深入搜索系列之部分匹配

    ElasticSearch 2 (17) - 深入搜索系列之部分匹配 摘要 到目前为止,我们介绍的所有查询都是基于完整术语的,为了匹配,最小的单元为单个术语,我们只能查找反向索引中存在的术语. 但是, ...

  5. [转帖]Kubernetes及容器编排的总体介绍【译】

    Kubernetes及容器编排的总体介绍[译] 翻译自The New Stack<Kubernetes 生态环境>作者:JANAKIRAM MSV和 KRISHNAN SUBRAMANIA ...

  6. Linux 下安装nginx的总结 (之前写的有问题))

    1. 下载niginx的 tar包 下载路径 http://nginx.org/en/download.html 也可以直接使用命令下载 wget http://nginx.org/download/ ...

  7. Android 出现 maybe missing INTERNET permission 错误问题解决

    在AndroidManifest.xml中,需要进行如下配置:<manifest> //加入以下许可 <uses-permission android:name="andr ...

  8. 使用fiddler的过滤条件

    使用fiddler抓包的时候经常一下子显示很多的记录,看的眼花缭乱,需要这时候需要使用过滤条件来帮助你,一般常用的有三种过滤条件: 1.域名过滤,只显示特定域名的记录: *.baidu.com表示所有 ...

  9. java学习之switch 等值判断

    当匹配到相等的值时候 则进入case里面执行语句 当该语句有break时候 则退出匹配 当没有break时候 则继续往下匹配 直到遇到break才停止匹配

  10. kubernetes部署

    [自动安装] 一:操作环境 操作系统    centos7 防火墙selinux #systemctl stop firewalld && systemctl disable fire ...