shell脚本练习【转】
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脚本练习【转】的更多相关文章
- 第一个shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...
- 使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...
- shell脚本规划化模板
shell脚本规划化模板 Linux运维过程中,shell脚本是不可缺少的工具,但是每个运维人员编程的习惯都不一样,很多时候就是实现某个功能,写出来的脚本都是烂七八糟的.脚本必须规范化,应该从以后几个 ...
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- Linux Shell脚本逻辑操作符简介
在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- Linux shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- shell 脚本之循环使用 for while 详解
任何一种编程语言中循环是比不可少的,当然 shell 脚本也少不了循环语句,包括 for 语句. while 语句.文中主要以实际用例来说明 for while 都有哪些常见的使用方法和技巧. 一.f ...
随机推荐
- 20150519 开始第一个Sprint
一.模仿并超越--类似应用. 观赏了各队的NABCD分析和产品BACKLOG,觉得大家还有潜力进一步打开思路. 各队首先去广泛研究一下与拟做项目类似的应用,对其中比较优秀的(不少于五个)进行深入试用, ...
- time since epoch
C++11 提供了新的获取系统时间的库函数,在获取时间的时候一般常用的是获取time since epoch,下面来看一下如何获取这个时间. #include <iostream> #in ...
- 读C#程序(第三周)
阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...
- (转)linux 内存管理——内核的shmall 和shmmax 参数
内核的 shmall 和 shmmax 参数 SHMMAX= 配置了最大的内存segment的大小 ------>这个设置的比SGA_MAX_SIZE大比较好. SHMMIN= 最小的内存seg ...
- dotTrace 每行执行时间和执行次数
如果代码中出现效率问题,使用dotTrace来跟踪分析代码的效率问题还是很方便的.使用dotTrace不但可以看到每一个方法被调用的次数和总时间,而且可以引入源代码,查看源代码中每一行执行的次数和时间 ...
- 平时在PHP编码时有没有注意到这些问题
编出一手好代码,这个是需要你在平时开发中日积月累的,平时如果你有注意到以下的那些代码的编码,那么祝贺你,你在技能提升这方面已经垫下了一些基础,编写出一手好代码,说白了就是你特么注意到性能这块的问题,代 ...
- 【大数据】SparkStreaming学习笔记
第1章 Spark Streaming概述 1.1 Spark Streaming是什么 Spark Streaming用于流式数据的处理.Spark Streaming支持的数据输入源很多,例如:K ...
- Java多线程与线程同步
六.多线程,线程,同步 ①概念: 并行:指两个或多个在时间同一时刻发生(同时发生) 并发:指两个或多个事件在同一时间段内发生 具体概念: 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多 ...
- 51Nod 1287 加农炮 (线段树)
1287 加农炮 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个长度为M的正整数数组A,表示从左向右的地形高度 ...
- Android应用如何跳转到应用市场详情页面
Android应用开发过程中,可能会有需求,比如:推广时跳转到应用市场下载应用,跳转到应用市场给自己的应用打分,跳转到应用市场更新自己的应用.那如何跳转到应用市场呢?可能跳转的方法大家都是知道的,方法 ...