zoukankan      html  css  js  c++  java
  • 第三部分shell编程3(shell脚本2)

    7. if 判断一些特殊用法
    if [ -z $a ] 这个表示当变量a的值为空时会怎么样
    if grep -q '123' 1.txt; then 表示如果1.txt中含有'123'的行时会怎么样
    if [ ! -e file ]; then 表示文件不存在时会怎么样
    if (($a<1)); then …等同于 if [ $a -lt 1 ]; then… [ ] 中不能使用<,>,==,!=,>=,<=这样的符号

    if [ ! $a -gt 0 ];then... 代表不大于0

    if [ -z $n1 ] 为空
    if [ -n $n1 ] 不为空
    if [ ! -z $n1 ]

    8. shell中的case判断
    格式: case 变量名 in
    value1)
    command
    ;;
    value2)
    command
    ;;
    *)
    commond
    ;;
    esac


    求余!!
    vim case.sh
    !# /bin/bash
    n1=`echo $1 |sed 's/[0-9]//g'`
    if [ -z $n1 ]; then
    m=$[$1%2]
    case $m in
    1)
    echo "the number is odd"
    ;;
    0)
    echo "the number is even"
    ;;
    *)
    echo "is other"
    ;;
    esac
    else
    echo "the character you input not a number"
    fi


    sh case.sh 6 $1代表第一个参数

    9. shell脚本中的循环
    for循环 语法结构: for 变量名 in 条件; do … done
    while 循环语法结构: while 条件; do … done 死循环用:表示
    break直接结束本层循环(跳出整个循环); continue忽略continue之下的代码(跳出本次循环),直接进行下一次循环
    exit 直接退出shell

    序列
    seq 1 [步长] 10 默认是1
    seq 1 10
    seq 10 -1 1
    seq 10 -2 1
    seq 1 2 10

    seq -w 1 100 宽度一样 ============
    001
    002
    ...
    100
    ===============
    vim for.sh
    !# /bin/bash
    for i in `seq 1 10`
    do
    echo $i
    done

    ==========
    vim for.sh
    !# /bin/bash
    for file in `ls`
    do
    ls -ld $file
    done

    =========
    vim for.sh
    !# /bin/bash
    sum=0
    for n in `seq 1 100`
    do
    sum=$[$sum+$n]
    done
    echo $sum

    ==========while死循环
    vim while.sh
    !# /bin/bash
    n1=1 这里可以是任意值
    while [ ! -z $n1 ]
    do
    read -p "input a number:" n
    n1=`echo $n |sed 's/[0-9]//g'`
    done
    echo "the number is $n."
    ===========
    vim break.sh
    !# /bin/bash
    for i in 1 2 3 4 5
    do
    echo $i
    if [ $i -eq 3 ]
    then
    break
    fi
    echo $i
    done

     

     


    10. shell中的函数
    函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。
    格式: function f_name() {
    command
    }
    函数必须要放在最前面
    函数里可以export 全局变量
    ===============
    function mysum() {
    sum=$[$1+$2]
    echo $sum
    }
    s=`mysum 1 2`
    echo $s
    ===============
    function mysum() {
    sum=$[$1+$2]
    return $sum
    }
    mysum 1 2
    echo $?
    =============
    function mysum() {
    sum=$[$1+$2] 如果在sum前面加local就在函数里面生效

    }
    mysum 1 10
    echo $sum
    ===========

    11. shell练习题
    编写shell脚本,计算1-100的和;
    编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;

    vim sum.sh
    !# /bin/bash
    if_nu() {
    n1=`echo $1|sed 's/[0-9]//g'`
    if [ -z $n1 ]
    then
    if [ $1 -gt 1 ]; then return 1; else return 0;fi
    else
    return 0
    fi
    }

    read -p "input a number :" n
    if_nu $n
    n2=`echo $?`
    if [ $n2 -eq 1 ]
    then
    sum=0
    for i in `seq 1 $n`
    do
    sum=$[$sum+$i]
    done
    echo $sum
    else
    echo "the character you input is not number"
    fi

     

    编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下;
    find /root -maxdepth 1 -type d 搜索root下的一级目录
    ===========
    for d in `ls /root/`; do if [ -d $d ]; then cp -r $d /tmp/;fi; done

    for d in `find /root -maxdepth 1 -type d`; do if [ -d $d ]; then cp -r $d /tmp/;fi; done

    编写shell脚本,批量建立用户user_00, user_01, ... user_100并且所有用户同属于users组;

    for i in `seq -w 0 99`; do useradd -g users user_$i; done

    编写shell脚本,截取文件test.log中包含关键词 ‘abc’ 的行中的第一列(假设分隔符为 ”:” ),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;

    awk -F: '/abc/ {print $1}' test.log |sort |uniq -c |sort -n |awk '$1>10'

     

  • 相关阅读:
    可以使用多少列创建索引?
    如何显示前 50 行?
    简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响-从读写两方面?
    实践中如何优化 MySQL ?
    列的字符串类型可以是什么?
    MySQL 里记录货币用什么字段类型好 ?
    什么是通用 SQL 函数?
    对于关系型数据库而言,索引是相当重要的概念?
    为表中得字段选择合适得数据类型?
    SQL 注入漏洞产生的原因?如何防止?
  • 原文地址:https://www.cnblogs.com/chenshoubiao/p/4854984.html
Copyright © 2011-2022 走看看