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练习题(持续更新)相关推荐

  1. Linux云计算各阶段练习题----持续更新中

    各阶段练习题 1.删除/tmp目录下所有文件 [root@localhost ~]#rm rf /tmp/* 2.将/etc/fstab, /etc/passwd, /etc/shadow三个文件分别 ...

  2. Shell整理(持续更新中)

    curl用法 在单行命令里设置环境变量 set 查看磁盘信息(型号, 容量等) 查看磁盘是否SSD sshfs挂载/卸载 line-by-line方式合并2个文件 exec, source, fork ...

  3. 有意思的记录-shell(持续更新)

    1.统计重复行的个数 sort uid.txt | uniq -c 2.查看压缩文件 cat *.gz | gunzip > 123 3.查看2个文件的交集.差集 comm用于比较两个有序文件, ...

  4. linux常用运维shell,常用的shell命令,持续更新 | linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札...

    查看可疑文件,查看访问可疑文件IP grep /api/_notes/index.php * . -r>ip.log 查看指定IP的nginx访问日志 cat access.log|grep 1 ...

  5. 团体程序设计天梯赛练习题-持续更新中

    1.L1-003 个位数统计 分数 15 输入格式: 每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N. 输出格式: 对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出 ...

  6. flex布局练习题,面试必备,持续更新建议收藏~

    先言:  现在网页布局大多都是flex布局,像浮动这些用得比较少,在面试中flex也是被经常问到的.而有些同学学完flex后,又不懂怎么练习巩固,所以,所以,所以,我汇聚了一些常见的flex的练习题案 ...

  7. adb 输入回车命令_Android超级终端(Adb Shell)常用命令、命令大全-持续更新 | 何连超的博客小站...

    Android超级终端(Adb Shell)常用命令.命令大全-持续更新 超级终端(手机端操作)与AdbShell(电脑端操作)使用的Shell命令(即Linux shell命令,类似Dos命令)是相 ...

  8. 整理全网Shell脚本合集,Java脚本,运维脚本,告警脚本,监控脚本,日志脚本,docker脚本等---------持续更新!

    整理全网Shell脚本合集,Java脚本,运维脚本,告警脚本,监控脚本,日志脚本,docker脚本等---------持续更新! 一.ffmpeg脚本 1.1 打开进程,并判断进程数量 1.2 关闭进 ...

  9. Java 最常见的 10000+ 面试题及答案整理:持续更新

    Java面试题以及答案整理[最新版]Java高级面试题大全(2021版),发现网上很多Java面试题都没有答案,所以花了很长时间搜集,本套Java面试题大全,汇总了大量经典的Java程序员面试题以及答 ...

最新文章

  1. AI一分钟|FF联合创始人聂天心离职;Siri联合创始人从苹果离职
  2. Nginx反向代理多个应用时,通过BluePring使Flask支持二级路径(URL前缀)
  3. Leetcode1963. 使字符串平衡的最小交换次数[C++题解]:贪心
  4. 【Java18】Mybatis:jdbc解耦,动态代理,日志
  5. javaweb的struts2的分页查询操作
  6. MySQL-库的操作
  7. “财务自由的15个阶段!说说你到哪个阶段了?”
  8. 使用Spring Boot和注释支持配置Spring JMS应用程序
  9. 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计
  10. 第三方侧滑菜单SlidingMenu在android studio中的使用
  11. 数据结构严蔚敏4.7习题2应用题(1)
  12. GAMP PPP部分学习与流程解析
  13. pix2pix、pix2pixHD 通过损失日志进行训练可视化
  14. Eclipse安装SVN检出项目插件Subclipse失败过程记录
  15. samba报错:smbd dead but pid file exists
  16. redis 关闭保护模式
  17. 基于android的学单词app
  18. BpbBppbpBB
  19. java pdf 修改内容_Java PDFBox – 读取和修改带有特殊字符的pdf(变音符号)
  20. 【C++】抽象和类(2)--如何实现类成员函数?

热门文章

  1. 【云周刊】第139期:阿里年会黑科技全揭秘:IoT手环、人脸识别验票、大屏弹幕互动等“十八般武艺”轮番上阵...
  2. Add a All Document Folder
  3. Linux操作系统基础解析之(五)——grep命令家族及正则表达式初识
  4. 基于http协议的api接口对于客户端的身份认证方式以及安全措施[转]
  5. Distributed transactions with multiple databases, Spring Boot, Spring Data JPA and Atomikos
  6. Oracle基础中的基础视频讲座录像(西安)供免费下载
  7. (转)直接拿来用!最火的iOS开源项目(一)
  8. 数论概论(Joseph H.Silverman) 习题 39.1 $\sqrt{3}$和$\sqrt{5}$的连分数展开中的重复现象...
  9. highgui java opencv_java – OpenCV 3.0.0 JAR缺少HighGUI
  10. HDU 1042 N!(高精度阶乘、大数乘法)