Shell练习题(持续更新)
1.输出1-10
echo {1..10} seq -s' ' 1 10 #默认分隔符\n for((i=1;i<=10;i++));do echo -n "$i ";done;echo #最后echo为了换行 i=1;while [ $i -le 10 ];do printf "%s " $i;i=$[$i+1];done;echo awk 'BEGIN{for(i=1;i<=10;i++) printf "%s ",i;}';echo
2.随机选人功能(while & 数组)
比如pick.sh 2,则显示两个人tom sam
#!/bin/bash com=`basename $0` num=$1 #选取人数 member=(sam tom jack marry terry) #定义数组 total=${#member[@]} #总数5 if [ $# -lt 1 -o $# -gt 1 ]; then #判断参数是否是一个echo "$com {[1-$total]}"exit 4 fi if [ $num -le $total -a $num -gt 0 ]; then #判断选取人数在1-5while [ $num -ge 1 ]; dorand=`echo "$RANDOM%$total" | bc` #取随机数0-4if [ -n "${member[$rand]}" ]; then #判断数值是否为空echo -n "${member[$rand]} "unset member[$rand] #删除数组值let num--fidone elseecho "$com {[1-$total]}" fi echo
3. 查询某字符串所在行号
查询hadoop用户在/etc/passwd中的行号
grep -n '^hadoop:' /etc/passwd | cut -d: -f1 awk '/^hadoop:/{print NR}' /etc/passwd
4.文件备份(tar & find)
使用tar备份和find删除大于3天的备份文件
#!/bin/bash list=/tmp/backup.list #备份文件列表 ddir=/tmp/b #备份路径 day=2 #备份保留天数 echo "[Backup]" >> /tmp/backup.log echo "start: `date +%F-%T`" >> /tmp/backup.log if [ ! -f $list ]; thenecho "$list doesn't exists."echo -e "[END]\n" >> /tmp/backup.log fi [ -d "$ddir" ] || mkdir -p $ddir &> /dev/null for file in `cat $list`; dotar jcf $ddir/`basename $file`-`date +%F-%H-%M-%M`.tar.bz2 $file &> /dev/nullif [ $? -eq 0 ]; thenecho "File: $file backup successfully." >> /tmp/backup.logelseecho "file: $file backup failed." >> /tmp/backup.logfi done echo "end: `date +%F-%T`" >> /tmp/backup.log echo -e "[Backup end]\n" >> /tmp/backup.log for bakfile in $ddir/*; dofind $ddir -mtime +$day -exec rm $ddir/$bakfile {} \; #删除3天前的备份文件 done
5.初始化Linux配置文件
用于光安装好的CentOS 5/6初始化
运行脚本前先要把Linux光盘放入
#!/bin/bash # init linux config # 2014-02-17 #chech os version version=$(grep -o "[0-9]\.[0-9]" /etc/issue | cut -d . -f1) #shutdown iptables & selinux & NetworkManager iptables -F service iptables save &> /dev/null sed -i s/SELINUX=enabled/SELINUX=disabled/g /etc/selinux/config service NetworkManager stop &> /dev/null #backup etc & yum repo [ -e /backup ] || mkdir /backup tar zcf /backup/etc.tar.gz /etc &> /dev/null find /etc/yum.repos.d/ -type f -exec mv {} /etc/yum.repos.d/old \; &> /dev/null #add yum repo from cdrom if [ "$version" -eq 5 ]; then cat > /etc/yum.repos.d/cdrom.repo << EOF [cdrom] name=local source baseurl=file:///mnt/cdrom/Server gpgcheck=0 enabled=1 EOF elif [ "$version" -eq 6 ]; then cat > /etc/yum.repos.d/cdrom.repo << EOF [cdrom] name=local source baseurl=file:///mnt/cdrom/ gpgcheck=0 enabled=1 EOF fi #mount cdrom [ -e /mnt/cdrom ] || mkdir /mnt/cdrom grep "/dev/cdrom" /etc/fstab &> /dev/null if [ ! $? -eq 0 ]; then cat >> /etc/fstab << EOF /dev/cdrom /mnt/cdrom/ iso9660 defaults,loop,ro 0 0 EOF fi mount -a
6.复制命令至/mnt/test下;以/mnt/test作为根(chroot /mnt/test),进行测试。
#!/bin/bash # cp Command to other # 2014-2-19 TargetDir=/mnt/test [ -d $TargetDir ] || mkdir -p $TargetDir #5秒不输入,就为默认值q,退出 read -t 5 -p "Input A Command: " Command Command=${Command:-q} #循环,直到输入q或Q后,退出 while [ "$Command" != 'q' -a "$Command" != 'Q' ]; do #复制命令 Command=`which $Command | grep -v "^alias" | grep -o [^[:space:]].*` ComDir=${Command%/*} [ -d ${TargetDir}/${ComDir} ] || mkdir -p ${TargetDir}/${ComDir} [ -f ${TargetDir}/${Command} ] || cp $Command ${TargetDir}/${Command} && echo "Copy $Command to $TargetDir finished." #复制命令所用到的库文件 for LIB in `ldd $Command | grep -o "[^[:space:]]*/lib[^[:space:]]*"`; do LIBDir=${LIB%/*} [ -d ${TargetDir}/${LIBDir} ] || mkdir -p ${TargetDir}/${LIBDir} [ -f ${TargetDir}/${LIB} ] || cp $LIB ${TargetDir}/${LIB} && echo "Copy $LIB to $Target finished." done read -p "Input your command: " Command done
7.Oracle VM虚拟机在线统计
#!/bin/bash # 统计oracle vm虚拟机在线数量 # 2014-02-20 #列出在线数量 xm list | grep -v ^Name | grep -v ^Domain-0 | awk '{print $1,$2}' > /backup/onlinevm.txt #列出虚拟机总数 grep -R "OVM_simple_name" /OVS/Repositories/0004fb0000030000a95eee3c2b21307a/VirtualMachines/* | awk 'BEGIN{FS="/"}{print $6,$7}' | awk '{print $1,$4}' > /backup/allvm.txt #合并两个文档 join /backup/onlinevm.txt /backup/allvm.txt > /backup/test.txt awk 'BEGIN{printf("\033[1;31m%-35s%-5s%-5s\033[0m\n","UUID","ID","HOST")};{printf("%-35s%-5s%-5s\n",$1,$2,$3)}' /backup/test.txt #显示在线数量 num=$(cat /backup/onlinevm.txt | wc -l) echo -e "\e[32mTotal $num VM Running.\e[0m"
8.mysql-5.5.33通用安装包安装
运行时,脚本与mysql安装包放在一个文件夹下。
#!/bin/bash # 通用包格式安装mysql # 2014-02-21 Software=mysql-5.5.33-linux2.6-x86_64.tar.gz MysqlDir=/usr/local/mysql DataDir=/mydata/data CpuNum=`cat /proc/cpuinfo | grep processor | wc -l` #创建mysql用户 id mysql &> /dev/null || useradd -r mysql #创建mysql数据库文件夹 [ -d /mydata/data ] || mkdir -p /mydata/data chown mysql.mysql -R /mydata/data #安装mysql tar xf $Software -C /usr/local ln -s /usr/local/mysql-5.5.33-linux2.6-x86_64 $MysqlDir chown root.mysql -R ${MysqlDir}/* cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf -f #修改配置,线程数和CPU个数相同 sed -i s/"thread_concurrency = 8"/"thread_concurrency = $CpuNum"/ /etc/my.cnf #修改配置,在[mysql]后插入adatadir = /mydata/data sed -i '/\[mysqld\]/adatadir = /mydata/data' /etc/my.cnf #复***务器启动文件 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld #安装mysql yum install -y libaio &> /dev/null #进入到mysql文件夹才能,运行下面的安装命令 cd /usr/local/mysql scripts/mysql_install_db --user=mysql --datadir=/mydata/data #配置环境变量 cat > /etc/profile.d/mysql.sh << EOF export PATH=/usr/local/mysql/bin:\$PATH EOF
转载于:https://blog.51cto.com/samlinux/1310704
Shell练习题(持续更新)相关推荐
- Linux云计算各阶段练习题----持续更新中
各阶段练习题 1.删除/tmp目录下所有文件 [root@localhost ~]#rm rf /tmp/* 2.将/etc/fstab, /etc/passwd, /etc/shadow三个文件分别 ...
- Shell整理(持续更新中)
curl用法 在单行命令里设置环境变量 set 查看磁盘信息(型号, 容量等) 查看磁盘是否SSD sshfs挂载/卸载 line-by-line方式合并2个文件 exec, source, fork ...
- 有意思的记录-shell(持续更新)
1.统计重复行的个数 sort uid.txt | uniq -c 2.查看压缩文件 cat *.gz | gunzip > 123 3.查看2个文件的交集.差集 comm用于比较两个有序文件, ...
- linux常用运维shell,常用的shell命令,持续更新 | linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札...
查看可疑文件,查看访问可疑文件IP grep /api/_notes/index.php * . -r>ip.log 查看指定IP的nginx访问日志 cat access.log|grep 1 ...
- 团体程序设计天梯赛练习题-持续更新中
1.L1-003 个位数统计 分数 15 输入格式: 每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N. 输出格式: 对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出 ...
- flex布局练习题,面试必备,持续更新建议收藏~
先言: 现在网页布局大多都是flex布局,像浮动这些用得比较少,在面试中flex也是被经常问到的.而有些同学学完flex后,又不懂怎么练习巩固,所以,所以,所以,我汇聚了一些常见的flex的练习题案 ...
- adb 输入回车命令_Android超级终端(Adb Shell)常用命令、命令大全-持续更新 | 何连超的博客小站...
Android超级终端(Adb Shell)常用命令.命令大全-持续更新 超级终端(手机端操作)与AdbShell(电脑端操作)使用的Shell命令(即Linux shell命令,类似Dos命令)是相 ...
- 整理全网Shell脚本合集,Java脚本,运维脚本,告警脚本,监控脚本,日志脚本,docker脚本等---------持续更新!
整理全网Shell脚本合集,Java脚本,运维脚本,告警脚本,监控脚本,日志脚本,docker脚本等---------持续更新! 一.ffmpeg脚本 1.1 打开进程,并判断进程数量 1.2 关闭进 ...
- Java 最常见的 10000+ 面试题及答案整理:持续更新
Java面试题以及答案整理[最新版]Java高级面试题大全(2021版),发现网上很多Java面试题都没有答案,所以花了很长时间搜集,本套Java面试题大全,汇总了大量经典的Java程序员面试题以及答 ...
最新文章
- AI一分钟|FF联合创始人聂天心离职;Siri联合创始人从苹果离职
- Nginx反向代理多个应用时,通过BluePring使Flask支持二级路径(URL前缀)
- Leetcode1963. 使字符串平衡的最小交换次数[C++题解]:贪心
- 【Java18】Mybatis:jdbc解耦,动态代理,日志
- javaweb的struts2的分页查询操作
- MySQL-库的操作
- “财务自由的15个阶段!说说你到哪个阶段了?”
- 使用Spring Boot和注释支持配置Spring JMS应用程序
- 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计
- 第三方侧滑菜单SlidingMenu在android studio中的使用
- 数据结构严蔚敏4.7习题2应用题(1)
- GAMP PPP部分学习与流程解析
- pix2pix、pix2pixHD 通过损失日志进行训练可视化
- Eclipse安装SVN检出项目插件Subclipse失败过程记录
- samba报错:smbd dead but pid file exists
- redis 关闭保护模式
- 基于android的学单词app
- BpbBppbpBB
- java pdf 修改内容_Java PDFBox – 读取和修改带有特殊字符的pdf(变音符号)
- 【C++】抽象和类(2)--如何实现类成员函数?
热门文章
- 【云周刊】第139期:阿里年会黑科技全揭秘:IoT手环、人脸识别验票、大屏弹幕互动等“十八般武艺”轮番上阵...
- Add a All Document Folder
- Linux操作系统基础解析之(五)——grep命令家族及正则表达式初识
- 基于http协议的api接口对于客户端的身份认证方式以及安全措施[转]
- Distributed transactions with multiple databases, Spring Boot, Spring Data JPA and Atomikos
- Oracle基础中的基础视频讲座录像(西安)供免费下载
- (转)直接拿来用!最火的iOS开源项目(一)
- 数论概论(Joseph H.Silverman) 习题 39.1 $\sqrt{3}$和$\sqrt{5}$的连分数展开中的重复现象...
- highgui java opencv_java – OpenCV 3.0.0 JAR缺少HighGUI
- HDU 1042 N!(高精度阶乘、大数乘法)