• 初学时的shell


    学习期间写过一些shell脚本,
    测试过程:vi test.sh 后把程序写入其中,保存退出。然后改变文件属性:chmod +x test.sh 最后执行:./test.sh
    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内容为 :"   #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 "
    expect "$"
    send "reboot "
    #expect "password:"
    #send "123456 "
    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 "open 10.0.2.224" > /tmp/ftp.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)
    #!/bin/bash
    x=0
    while [ $x -ne 5 ]; do
    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 x
    case $x in
    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

    2)
    #!/bin/bash
    x=1
    while [ $x -ne 0 ]; do
    echo "1.ls - list current directory"
    echo "2.cd - change directory"
    echo "3.mkdir - create a directory"
    echo "4.rm - remove"
    echo "0.quit"
    echo please input:
    read x
    echo input:$x
    case $x in
    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 "
    expect eof
    interact   #把控制权交给用户
    大批量创建用户和修改密码:   
    #!/bin/bash
    #此脚本适合于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

  • 相关阅读:
    eclipse快捷键
    iOS音频播放 (二):AudioSession 转
    HNU13377:Book Club(DFS)
    BAPC2014 K&amp;&amp;HUNNU11591:Key to Knowledge(中途相遇法)
    小米净水器与小区过滤价格水对照.xls
    NUTCH2.3 hadoop2.7.1 hbase1.0.1.1 solr5.2.1部署(一)
    hibernate动态表名映射--仅仅有想不到,没有做不到
    【BZOJ 1660】 [Usaco2006 Nov]Bad Hair Day 乱发节
    oracle-企业信息化
    线性查找算法
  • 原文地址:https://www.cnblogs.com/sand-tiny/p/3530402.html
Copyright © 2020-2023  润新知