zoukankan      html  css  js  c++  java
  • Shell Script

    第一行一般这样写 #!/bin/bash

    #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

    hello world

    #!/bin/bash

    echo "hello world"

    保存为t.sh,然后 chmod +x ./t.sh  赋予这个文件可执行权限

    变量

    首个字符必须为字母,可以使用下划线_,不能使用标点符号,不能用bash的关键字,赋值变量的时候跟等号之间不能有空格

    使用变量的时候,要在变量前加上$,变量最好加上花括号,比如

    name="tracy"

    echo ${name}

    只读变量:只读变量的值不能被改变  

    readonly name

    运算符

    原生的bash不支持简单的数学运算,但是可以通过其他的命令来实现。比如 awk 和 expr。expr最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。比如

    val=`expr 2 + 2`

    echo "val = $val"

    结果:val = 4

    注意:1.表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2 

    2.完整的表达式要被 ` ` 包含 (esc下面这个键)

    布尔运算符:! -o -a 分别代表非,或,与

    流程控制

    条件控制

    name="tracy"

    if [ $name = "tracy" ]

    then

      echo 'name = tracy'

    fi

    注意判断语句要加上 [ ] ,并且要空格,如果then要写在上面一行的话,上一行要先加上分号隔开一下。比如

    if [ $name = "tracy" ];then ..... 以后还有类似的情况,总之就是,如果写在一行要记得用分号隔开。

    for循环

    for loop in 1 2 3 4 5

    do

      echo "the value is:$loop"

    done

     

    while循环

    int=1

    while(( int < 5 ))

    do

      echo $int

      let 'int++'

    done

    函数

    无参数,无返回值的函数

    myfun(){

      echo 'my first shell fun'

    }

    myfun  #函数调用,不需要加括号

    无参数,有返回值

    sum(){

      echo "input a num"

      read num_a

      echo "input another num"

      read num_b

      return $(( $num_a + $num_b ))

    }

    sum

    echo "sum is $? "

    注意:在函数调用后使用$?来获取返回值

    带参数的函数

    funWithPara(){
      echo "the first para is $1"
      echo "the second para is $2"
      echo "the third para is $3"
    }
    funWithPara 1 2 3

    通过$n来获取参数的值,$1表示第一个参数,以此类推。$#表示传进来的参数的总数,$*以字符串的形式显示所有传进来的参数

    输入输出重定向

    通常来说, UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。

    1.输出重定向

    格式:command>file

    echo "hello world" > a

    cat a  # hello world

    注意如果文件a里有内容,那么上面代码是会覆盖掉里面的内容的,如果不想覆盖,要使用 >> ,这样就会加在内容末尾(以追加的方式)

    2.输入重定向

    格式:command < file

    wc -l < t.sh  # 打印出文件打行数

    一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件

    • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
    • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
    • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

    如果希望 stderr 重定向到 file,可以这样写 

    command 2 > file

    如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:

    command > file 2>&或者  command >> file 2>&1

    3.Here Document

    格式:

    command << delimiter
           document
    delimiter

    注意:1.结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。

    2.开始的delimiter前后的空格会被忽略掉。

    3.我试了下,delimiter可以写aaa,bbb什么的,这玩意只是用来界定开始结束的,网上一般大家都写EOF。

    cat << aa
    go lakers
    go shell
    aa

    /dev/null

    如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null

    command > /dev/null   比如  echo "hello world" > /dev/null

    /dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

    如果希望屏蔽 stdout 和 stderr,可以这样写:

    command > /dev/null 2>&1

    文件包含

    包含一个文件用

    . filename #注意点和filename之间的空格

    或者

    source filename这两种形式都可以包含进来

    比如

    新建一个文件t1.sh

    #!/bin/bash
    val="i am val"

    新建一个文件t.sh

    #!/bin/bash
    #. ./t1.sh
    source ./t1.sh
    echo "the val is $val"

    结果:    the val is i am val

    注意:被包含的文件不需要可执行权限

    删除多个账号

    比如有5个账号分别是myquota1,myquota2,myquota3,myquota4,myquota5,要删掉他们,写如下脚本

    #!/etc/bash

    users=`grep "myquota*" /etc/passwd | cut -d ':' -f1`

    for username in $users
    do
    userdel -r $username
    done

    执行完,再看看 grep myquota* /etc/passwd 发现已经删除掉了

  • 相关阅读:
    【原创】枚举Android系统的进程、任务和服务的信息
    WPF学习笔记“控件”一:控件基本属性
    WCF学习笔记:基础一
    WPF学习笔记“布局”三:Grid分割窗口
    WPF学习笔记“XAML”一:基础
    WPF学习笔记“窗口”一:入门
    WPF学习笔记“形状”:基础
    WPF学习笔记“窗口”二:入门
    WPF学习笔记“窗口”四:三种方式不规则窗口实现大小的改变
    WPF学习笔记“窗口”三:入门
  • 原文地址:https://www.cnblogs.com/i-love-kobe/p/7286097.html
Copyright © 2011-2022 走看看