初学时的shell
for语句测试:
1)
#!/bin/bash
for num in 1 2 3
do
echo "hello,num=$num"
done
2)
#!/bin/bash
for ((i=1;i<=3;i=i+1 ));do echo hello,$i;done
if语句测试:
#!/bin/bash
echo "please run the program with more than one param"
if [ "$1" = '' ] #$1是只运行该程序时可加参数1,如./iftest.sh 1 注意等号旁边和中括号的空格
then
echo "error"
else
echo "ls内容为\n:" #echo '$1':$1
echo `ls`
fi
while语句测试:
1)
#!/bin/bash
m=0
while [ $m -lt 10 ]
do
echo $m
m=`expr $m + 1` #注意m旁边的空格
done
2)
declare -i m=0 #别一种在算术运算时声明变量的方法
while [ $m -lt 10 ]
do
echo $m
m=$m+1
done
until语句测试:
1)
#!/bin/bash
declare -i m=10
until [ $m -lt 10 ]
do
echo $m
m=$m-1
done
2)
declare -i m=0
while [ $m -lt 10 ]
do
echo $m
m=$m+1
done
sed测试:
#!/bin/bash
#sed '/^root/ !s/bash/nologin/' /etc/passwd
man sed | col -b > fortest.sh
sed '1,$s/is/--end/' fortest.sh
sed '1,$s/is/--end/g' fortest.sh
sed '/is/=' fortest.sh
引号测试:
#!/bin/bash
var=hello
echo "var is $var"
echo 'var is $var'
echo "var is \$var"
echo `ls`
var2=date
echo `$var2`
case语句测试:
#!/bin/bash
for (( ;; ))
do
echo "please input a key:"
read word
case $word in
1)
echo "your chioce is the one"
;;
2)
echo "your chioce is the two"
;;
3)
echo "your chioce is the three"
;;
q)
echo "your choice is exit"
exit
;;
*)
echo "illegal choice"
exit
esac
done
" $ "符号测试:
#!/bin/bash
echo "please run with more than one parm";
echo "program name \$0:"$0;
echo "first param \$1:"$2;
echo "first param \$$:"$$;
echo "first param \$*:"$*;
数组的使用:
#!/bin/bash
hostip=("100","101","102","103","104","105","106","107","108","109","110")
hostpass=("123456","123456","123456","123456","123456","123456","123456","123456","123456","123456","123456")
i=1
while [ $i -lt 12 ] ; do
ssh root@10.0.2.hostip[$i]
done
重启别人电脑的shell: #这个好像有点问题,需再测试下
#!/usr/bin/expect
spawn ssh root@10.0.2.120
expect "password:"
send "123456\n"
expect "$"
send "reboot\n"
#expect "password:"
#send "123456\n"
expect eof
查找文件,需指定查找目录和文件的修改时间:
#!/bin/bash
path=$1
date=$2
if [ -z $path ]
then
echo "Please input find path:(eg:/dev/abc/)"
read path
fi
if [ -z $date ]
then
echo "Please input find date:(eg:2006-04-23)"
read date
fi
ls -l $path --time-style=long-iso | grep "$date $time"
递归算法:
1)
#!/bin/bash
function myls()
{
local y=`ls`;
echo $y;
for z in $y;do
if [ -d $z ];then
echo "进入子目录";
cd `pwd`/$z;
myls;
echo "返回上一级目录";
cd..;
fi
done
}
echo "please input a directory:"
read x
cd $x
myls;
2)#!/bin/bash
check_dir()
{
if [ -d $y ];then
echo "$y是一个目录";
ls -l $y
else
echo "$y是一个文件";
fi
}
echo "please input a directory:"
read y
x=`ls $y`
echo $x
for y in $x;do
check_dir
done;
备份脚本:
#!/bin/bash
/bin/tar -zcf /var/mail
/bin/cp /var/mail.tar.gz /root
查找目录:
#!/bin/bash
ls -l | grep ^d
#输出当前目录下的所有目录
更新ftp服务器上的文件:
#!/bin/bash
echo "open 10.0.2.224" > /tmp/ftp1.cmd
echo "user ubunadm 123456" >> /tmp/ftp1.cmd
echo "get `date +%Y`/`date +%Y%m`/`date +%d`/file01 /root/copy/file02" >> /tmp/ftp1.cmd
ftp -nv < /tmp/ftp1.cmd
echo "quit" >> /tmp/ftp1.cmd
echo "user ubunadm 123456" >> /tmp/ftp.cmd
j=`date +%Y`/`date +%Y%m`/`date +%d`
echo "$j"
echo "cd $j" >> /tmp/ftp.cmd
cd /root/copy
m=`ls -l|awk '{print $5}'`
n=$m
while true ; do
echo "大小 $m and $n"
if [ $m -eq $n ] ; then
echo "OK!"
n=$m
echo "**********************************************"
echo "size file01" >> /tmp/ftp.cmd
x=`ftp -nv < /tmp/ftp.cmd`
echo "--------------------------"
echo "文件内容为:$x"
echo "--------------------------"
m=`echo $x | awk '{print $31}'`
echo "--------------------------"
echo "文件大小为:$m"
echo "--------------------------"
else
echo "get `date +%Y`/`date +%Y`${x:0:2}/${y:0:2}/file01 /root/copy/file02" >> /tmp/ftp1.cmd
ftp -nv < /tmp/ftp1.cmd
n=$m
echo "更新成功"
fi
sleep 3
done
制作菜单脚本:
1)
x=0
while [ $x -ne 5 ]; do
echo "Change Directory....2"
echo "Edit File...........3"
echo "Remove File.........4"
echo "Exit Menu...........5"
read x
1)echo "current directory is:"
ls `pwd`;;
2)echo "Enter target directory:/"
echo "List Directory......1"
echo "Change Directory....2"
echo "Edit File...........3"
echo "Remove File.........4"
echo "Exit Menu...........5"
echo "Please choose one:"
read y
case $y in
1)echo "current directory is:"
ls `pwd`;;
2)echo "Please a path:"
read z
cd $z;;
3)echo "Please input a file:"
read i
vi $m;;
4)echo "Please input a file";
read j
rm -rf $n;;
5)echo "Exit";;
esac
;;
3)echo "Please input a file:"
read m
vi $m;;
4)echo "Please input a file";
read n
rm -rf $n;;
5)echo "Exit";
esac
done
#!/bin/bash
x=1
while [ $x -ne 0 ]; do
echo "2.cd - change directory"
echo "3.mkdir - create a directory"
echo "4.rm - remove"
echo "0.quit"
read x
echo input:$x
1)echo "ls - list current directory";;
2)echo "cd - change directory";;
3)echo "mkdir - create a directory";;
4)echo " 1.file - remove a file
2.directory - remove a directory"
read y
echo input is:$y
case $y in
1)echo "file - create a directory";;
2)echo "directory - remove a directory";;
*)echo "bad";;
esac
;;
0)echo "bad";
esac
done
大量发邮件脚本:
1)
#!/bin/bash
exec 3<friends;#将名字,拼音,邮件分成三列输入friends中
exec 0<&3-;
while read a b c ; do#读文件里的三列
echo $a $b $c;
echo "Hi,$b!
Happy......
...
.... `date`" >mymail#生成一封邮件
mail -S "Happy New Year!" $c < mymail
done
3<&0-
2)
#!/bin/bash
exec 3<friends;#将名字,拼音,邮件分成三列输入friends中
exec 0<&3-;
while read a b c ; do#读文件里的三列
echo $a $b $c;
mail -S "Happy New Year!" $c <<Delimit
Hi,$b!
Happy......
...
.... `date`"#用临时文档( <<Delimit 文件内容 Delimit )输入邮件内容
Delimit
done
3<&0-
ssh自动登陆另一台机:
1)
#!/usr/bin/expect
spawn ssh [lindex $argv 0]
set password [lindex $argv 1]
expect "*password:"
send "$password\r"
expect eof
interact #把控制权交给用户
大批量创建用户和修改密码:
#此脚本适合于ubuntu下
#此小脚本为方便需要批量添加大量用户的管理员而写,密码默认设置为用户名.
read -p "请输入你想要添加的用户名和需要的个数(如:xuanfei 100):" a b
for((i=1;i<=$b;i++))
do
useradd
-m $a$i && echo "$a$i:$a$i" > swp && chpasswd <
swp && pwconv && echo "添加$a$i用户成功"
done
rm -rf swp
2)
#!/bin/bash
#此脚本适合于Redhat下
for((i=0;i<10;i++))
do
useradd user$i
echo "加用户 $user 成功"
echo "user$i" | passwd --stdin user$i
done
初学时的shell的更多相关文章
- [综]隐马尔可夫模型Hidden Markov Model (HMM)
http://www.zhihu.com/question/20962240 Yang Eninala杜克大学 生物化学博士 线性代数 收录于 编辑推荐 •2216 人赞同 ×××××11月22日已更 ...
- java提高篇(十六)-----异常(一)
Java的基本理念是“结构不佳的代码不能运行”!!!!! 大成若缺,其用不弊. 大盈若冲,其用不穷. 在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因 ...
- 那些年我们写过的T-SQL(上篇)
在当今这个多种不同数据库混用,各种不同语言不同框架融合的年代(一切为了降低成本并高效的提供服务),知识点多如牛毛.虽然大部分SQL脚本可以使用标准SQL来写,但在实际中,效率就是一切,因而每种不同厂商 ...
- AngularJS 开发中常犯的10个错误
简介 AngularJS是目前最为活跃的Javascript框架之一,AngularJS的目标之一是简化开发过程,这使得AngularJS非常善于构建小型app原型,但AngularJS对于全功能的客 ...
- 【团队冲刺总结】一个编码人员的反(tu)思(cao)
消失了半个多月了啊,算算时间,好像确实有近个把月没有好好的写博客来了.我一直很想写博客的,之前有老师问过写博客的动力是什么.我想了想,我觉得可能是我比较喜欢看书吧,不管是专业书还是小说(好吧,我承认, ...
- Bootstrap 我的学习记录2 栅格系统初识
以下理论内容copy自bootstrap中文网(一个不错的bootstrap学习网站). 栅格系统 Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport) ...
- Hadoop 中文编码相关问题 -- mapreduce程序处理GBK编码数据并输出GBK编码数据(转)
hadoop的hdfs文件系统中,默认的是utf-8, 故你上传的文件是要设置成utf-8.当输入的是gbk,有该如何? 输入是GBK文件, 输出也是 GBK 文件的示例代码: Hadoop处理GBK ...
- 精《记叙“tom”4年的软件开发之旅》
1.引言 本篇文章是记叙tom四年的软件开发从业经历,虽然他资历不长,况且本身也是个菜鸟,但他也曾有过荣誉.迷茫.困惑与选择,在这里他希望通过自己所经历过的事情分享给大家,给那些真正热爱软件开发的同学 ...
- mmap内存映射复习
c语言初学时,比较常见的一个习题就是实现cp. 使用c库实现的cp就不赘述了. 最近工作用到内存映射,就拿来练下手,复习一下mmap的用法. 很简单,将目标文件和源文件映射到内存,然后使用memcpy ...
随机推荐
- 继续畅通工程 HDOJ--1879
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- oracle的基本信息查询
oracle查看当前数据库实例名 select name from V$DATABASE; 或者 select SYS_CONTEXT('USERENV','INSTANCE_NAME') from ...
- scp 在不同机器上传文件
推荐个博客,挺好的.http://www.cnblogs.com/hyddd/archive/2009/09/19/1570224.html 在不同机器上传文件是一个很常见的需求,也有很多种方法.我只 ...
- Javascript 查找字符串中出现最多的字符和出现的次数
<script type="text/javascript"> //查找字符串中出现最多的字符和出现的次数 var str = 'Thatwheneying its o ...
- Bzoj 2243: [SDOI2011]染色 树链剖分,LCT,动态树
2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 5020 Solved: 1872[Submit][Status ...
- (DT系列三)系统启动时, dts 是怎么被加载的
一,主要问题:系统在启动的时候,是怎么加载 dts的:Lk,kernel中都应调查. 二:参考文字dts加载流程如下图所示: 启动过程中,bootloader(默认是bootable/bootload ...
- Android游戏与应用开发最佳学习路线图
Android 游戏与应用开发最佳学习路线图 为了帮助大家更好的学习 Android,并快速入门特此我们为大家制定了以下学习路线图,希望能够帮助大家. 一.路线图概括: 二.具体需要掌握知识点: 三. ...
- Test2014-3-1 魅力值比较
魅力值比较 [问题描述] 大学生恋爱的问题造成了数量众多的异地恋,有许多J大的女生早早被Q大男生追走,这导致了J大男生的强烈不满.就在吐血高调地向一位J大美女展开攻势的之后,J大男生终于爆发了. 为了 ...
- MySQL执行计划 EXPLAIN参数
MySQL执行计划参数详解 转http://www.jianshu.com/p/7134286b3a09 MySQL数据库中,在SELECT查询语句前边加上“EXPLAIN”或者“DESC”关键字,即 ...
- mysql按字段分组并获取每个分组按照某个字段排序的前三条
这是原始数据 想按照brand_id分组 并获取每个分组total_num最高的前3位 SQL语句为: > (select count(*) from data where brand_id = ...