• [读书笔记]鸟哥的LINUX私房菜 十三章 shell scripts


    shell scripts语法

    #!/bin/bash   规定使用bash语法解释scripts
    #Program:    表明程序开始
    主程序部分
    exit 0            表明程序结束 #用sh执行脚本会新开一个子进程bash来执行,脚本中产生的变量不存在与父进程
    #用source 执行脚本会直接在本进程中执行脚本,变量会保留。  注意如果用SOURCE执行就不要加exit 0了,因为它会关闭父进程。
     
    sh 脚本文件 参数一 参数二 。。。 $0文件名 $1参数一 $#参数个数 $@显示所有参数
    date1=$(date -d '-1 day' +'%Y%m%d%A') date指令-d '-1 day'表示一天前,也可以用week year month等。 +'%Y%m%d%A'是把日期传给变量
    total=$(($num1*$num2))    $((表达式))   用$加双括号可以计算表达式, 只支持整数。
    printf {"%d * %d = %d",$num1,$num2,$total}  用printf格式化输出记得加 {}大括号
     
    test指令 测试文档,目录,比较两个数值,两个文件等,权限等,用法巨多,参考P453
    test -e sh04.sh && echo "yes" || echo "no"  如果文件存在则输出YES   -e测试文件或目录是否存在
     
    read -p "filename:" filename #检查文件的rwx读写执行权限
    test -r $filename && authority='r' || authority='_'  记得要用$把变量取出后才能使用
    test -w $filename && authority=$authority'w' || authority=$authority'_'   注意是给authority重新复制,不可au=au+xx这样!!
    test -x $filename && authority=$authority'x' || authority=$authority'_'
    echo "$authority"
     
    [ $a == $b ] && echo "equel" || echo "not"   可用中括号来进行变量的判断 注意中括号两侧,判断号两侧必须留空格!!!
    如果变量时字符串的时候要用双引号引起 如[ "$a" == "$b" ]  否则 如a="nihao",$a=nihao, "$a"="nihao",如果没双引号的nihao就变成变量了
     

    PS:shell中单引号中不会把变量的值调出,直接使用字面意思。  而双引号就会引用出隐含意,比如\n就会生效 

    sed "s/'/\"/g" sh05.sh   就可以将单引号换成单引号,而sed 's/\'/"/g' sh05.sh 就不可以,因为此时反斜杠转义符无生效!!
     
    [ "$yn" == "n" -o "$yn" == "N" ] && echo "no" && exit 0      1,-o代表或 2,连续使用&&可延续判断,如先输出no再exit
    [ "$#" -lt "2" ] && echo "avgs too little" && exit 0 中括号比较不能用>这种符号 要用 gt,lt,eq,ne,ge,le
    if else 多重判断语法
    read -p "please input (Y/N):" yn
    if [ "$yn" == "y" ] || [ "$yn" == "Y" ]; then     #记得中括号之间的内容一定要有空格!!!!     IF后一定要有分号;!!!
             echo "yes"
             exit 0
    elif [ "$yn" == "n" ] || [ "$yn" == "N" ]; then  # if  elif  与中括号之间,一定要有空格!!!
             echo "no"
             exit 0
    else
    echo "i don't know what you'v type in"
    fi
    testing=$(netstat | grep ":http")  将输出导入变量的语法!!
    date --date "20101018" +%s  把日期字符串转化为秒!  注意字符串要引号括起, +%s前必须空格!! shell考虑空格的!!
    case语法
    case $1 in   #case 变量 in
    "hello")        #字符串加右括号
            echo "you type hello"
            ;;        #双分号代表此段结束
    "")
            echo "you type nothing"
            ;;
    *)              #星号代表default
            echo "else"
            ;;
    esac         #反写case代表case语法段结束
    function建立函数语法
    function printIt()  #function关键字 空格 函数名 括号
    {                         #用双大括号包围函数体
            echo "I just use function"
    }
     
    printIt                 #调用函数时,只需写函数名,不用括号!!!
    printIt
    exit 0
     
    函数名 参数一 参数二 。。。 $0文件名 $1参数一 $#参数个数 $@显示所有参数
     
    循环loop
    read -p "please input a word,type yes to end:" word
    while [ "$word" != "yes" ] && [ "$word" != "YES" ]    #条件可以用|| &&相连    do开始 done结束
    do
            read -p "please input a word,type yes to end:" word
    done
    read -p "please input a word,type yes to end:" word
    until [ "$word" == "yes" ] || [ "$word" == "YES" ]
    do
            read -p "please input a word,type yes to end:" word
    done
     

    forxunhuan

    for animal in dog cat bird elephanp     #语法跟python差不多, 后面的循环列表用空格隔离
    do
            echo "this is ${animal}s"              #这里要注意 如果想在变量后直接加字符  就用{}大括号括住再取出变量
    done
    exit 0
     
    users=$(cut -d ':' -f1 /etc/passwd)  通过指令把多个值(多行)存到变量中  再用for循环多个值
    for username in $users
    do
            id $username
            finger $username
    done
    seq 相当于python的range()
    sum=0
    for i in $(seq 1 100)  #从1到100的序列    seq 1 2 10表示1到10步长为2   seq 10 -1 1 表示10到1 步长为-1
    do
            sum=$(($sum+i)) #  钱双括号来计算
    done
    echo "$sum"
     
    for循环的第二种形式
    read -p "input a number:" num
    sum=0
    for((i=0;i<=num;++i))   #支持i=i+1 i++ ++i这样的操作 
    do
            sum=$((sum+i))
    done
    echo "$sum"
     
    scripts 调试
    sh -x 很有用 把运行的语句打印出来 变量也显示为当时的值     -n 仅显示错误提示,不运行
    gcc makefile
    gcc -c file.c 产生.o文件           gcc -o filename file1.o file2.o  产生filename.exe文件
     
    main:hello.o hello2.o   前面的main是文件名而已,与exe文件名对应即可,然后列举需要用到的。o文件
            gcc -o main hello.o hello2.o   这里前面空格用TAB

    当更新了.c文件后,直接再下一次make命令就可以重新编译

  • 相关阅读:
    网络编程基础----并发编程 ---守护进程----同步锁 lock-----IPC机制----生产者消费者模型
    Socketserver
    网络编程基础---并发编程--多进程
    网络基础之操作系统--多道技术--进程
    信息标记 以及信息提取--xml-json-yaml
    网络基础之网络协议篇---CS架构--网络通信--osi 协议---套接字socket--粘包
    HTTP协议 与 Requests库
    Requests 库
    2015/08/24
    1、pyspider安装
  • 原文地址:https://www.cnblogs.com/iyjhabc/p/2987483.html
Copyright © 2020-2023  润新知