zoukankan      html  css  js  c++  java
  • PJzhang:鸟哥的linux私房菜-shell脚本-上

     猫宁~~~

    建议全程在centos7中进行,我在kali linux中有些命令无法执行。

    1~家目录下创建bin文件,test.sh文件在bin目录

    下面的shell代码打印Hello World!

    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    echo -e "Hello China! a 
    "
    exit 0

    2~输入名称,变量前空格一定要严格空出来哦

    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    read -p "Please input your first name:" firstname
    read -p "Please input your last name:" lastname
    echo -e "
    Your full name is:${firstname} ${lastname}"

    sh test.sh

    echo ${firstname} ${lastname},空

    source test.sh

    echo ${firstname} ${lastname},不空

    3~批量创建文件,自定义名称之后添加时间,设置大量变量

    不定义文件名前缀,默认是filename,直接回车即可

    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    echo -e "I will use 'touch' command to create 3 files."
    read -p "Please input your filename:" fileuser
    filename=${fileuser:-"filename"}
    date1=$(date --date="2 days ago" +%Y%m%d)
    date2=$(date --date="1 days ago" +%Y%m%d)
    date3=$(date +%Y%m%d)
    file1=${filename}${date1}
    file2=${filename}${date2}
    file3=${filename}${date3}
    touch "${file1}"
    touch "${file2}"
    touch "${file3}"

    4~两个数相乘运算

    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    echo -e "You should input 2 numbers,I will multiplying them! 
    "
    read -p "first number:" firstnu
    read -p "second number:" secnu
    total=$((${firstnu}*${secnu}))
    echo "
    The result of ${firstnu}*${secnu} is ==> ${total}"

     

    echo $((120*120))   乘积,整数计算

    echo $((13%3))   取余

    echo "1.2*1.2" | bc   小数计算,添加bc,bc在centos7上可以用,但是在kali linux上不可以

    5~计算π的值,4*a(1)是bc提供的计算π的函数

    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    echo -e "This program will calculate pi value. 
    "
    echo -e "You should input a float number to calculate pi value. 
    "
    read -p "The scale number (10~10000):" checking
    num=${checking:-"10"}
    echo "Starting calcuate pi value. Be patient."
    time echo "scale=${num}; 4*a(1)" | bc -lq

    6~test判断

    目录是否存在

    在/root下创建test目录

    test -e /test && echo "exist" || echo "Not exist"

    打印exist

    test -e /root/test && echo "exist" || echo "Not exist"

    打印Not exist

    -e   文件或目录

    -f   针对文件存在与否

    -d   针对目录存在与否

    文件权限相关

    test -s /root/test.html && echo "exist" || echo "Not exist"

    -r   可读

    -w   可写

    -x   可执行

    -s   文件是否为空

    文件比较

    test1.html更新,打印exist

    test test1.html -nt test.html && echo "exist" || echo "Not exist"

    -nt    更新

    -ot   更旧

    -ef   是否为同一个文件

    整数间判定

    test 1 -eq 1 && echo "exist" || echo "Not exist"   打印exist

    -eq  相等

    -ne   不等

    -gt   前者大于后者

    -lt   前者小于后者

    -ge   前者大于等于后者

    -le   前者小于等于后者

    字符串判定

    test -z 111 && echo "exist" || echo "Not exist"   打印Not exist

    -z   字符串为空显示exist,其他显示Not exist

    -n   字符串为空显示Not exist,其他显示exist

    test 111 == 111 && echo "exist" || echo "Not exist"

    111 == 111   相等,打印exist,不相等,打印Not exist

    111 != 111   相等,打印Not exist,不相等,打印exsit

    多重条件判定

    -rw-r--r--. 1 root root 5556 Oct 11 20:49 test.html

    test -r test.html -a -x test.html && echo "exist" || echo "Not exist"   打印Not exist

    test ! -x test.html && echo "exist" || echo "Not exist"   没有执行权限,打印exist

    -a   and关系

    -o   or关系

    !   相反

    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    echo -e "Please input a filename,I wiil check the filename's type and permission. 
    
    "
    read -p "Input a filename:" filename
    test -z ${filename} && echo "You must input a filename." && exit 0
    test ! -e ${filename} && echo "The filename '${filename}' DO NOT exist" && exit 0
    test -f ${filename} && filetype="regulare file"
    test -d ${filename} && filetype="directory"
    test -r ${filename} && perm="readable"
    test -w ${filename} && perm="${perm} writable"
    test -x ${filename} && perm="${perm} executable"
    echo "The filename:${filename} is a ${filetype}"
    echo "And the permissions for you are:${perm}"

    文件名为空显示

    You must input a filename.

    目录

    Input a filename:test
    The filename:test is a directory
    And the permissions for you are:readable writable executable

    文件不存在

    Input a filename:120
    The filename '120' DO NOT exist

    文件存在

    Input a filename:test.html
    The filename:test.html is a regulare file
    And the permissions for you are:readable writable

    7~判断符号

    [ "abcd" == "abcd" ] ; echo $?   打印0

    [ "abcd" == "abc" ] ; echo $?   打印1

    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    read -p "Please input (Y/N):" yn
    [ "${yn}" == "Y" -o "${yn}" == "y" ] && echo "OK,continue" && exit 0
    [ "${yn}" == "N" -o "${yn}" == "n" ] && echo "Oh,interrupt" && exit 0
    echo "I don't know what your choice is" && exit 0

     8~默认变量

    [root@pjzhang ~]# file /etc/init.d/network
    /etc/init.d/network: Bourne-Again shell script, ASCII text executable

    文件是可执行脚本

    /etc/init.d/network   stop,start,status

    $0   脚本文件名

    $#   后接参数个数

    $@   参数全部内容,加双引号

    ${1}   第一个参数

    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    echo "The script name is    ==>${0}"
    echo "Total parameter number is    ==>$#"
    [ "$#" -lt 2 ] && echo "The number of parameter is less than 2. Stop here." && exit 0
    echo "Your whole parameter is    ==>'$@'"
    echo "The 1st parameter    ==>${1}"
    echo "The 2st parameter    ==>${2}"

     第一次偏移掉1个,第二次在第一次基础上偏移掉3个,从前向后

    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    echo "Total parameter number is     ==>$#"
    echo "Your whole parameter is    ==>'$@'"
    shift
    echo "Total parameter number is     ==>$#"
    echo "Your whole parameter is    ==>'$@'"
    shift 3
    echo "Total parameter number is     ==>$#"
    echo "Your whole parameter is    ==>'$@'"

    over~~~

  • 相关阅读:
    工作了四五年,感觉技术上依旧长进不大
    Web 性能优化:Preload与Prefetch的使用及在 Chrome 中的优先级
    Fundebug支持浏览器报警
    JavaScript是如何工作的:引擎,运行时和调用堆栈的概述!
    Vue UI:Vue开发者必不可少的工具
    阿里巴巴TXD前端小报
    深入了解浏览器存储:对比Cookie、LocalStorage、sessionStorage与IndexedDB
    JavaScript字符串转数字的5种方法及其陷阱
    灵活使用 console 让 js 调试更简单
    JavaScript大师必须掌握的12个知识点
  • 原文地址:https://www.cnblogs.com/landesk/p/13796054.html
Copyright © 2011-2022 走看看