zoukankan      html  css  js  c++  java
  • Linux shell

    cat /etc/shells 查看系统中所有的shell
    echo $SHELL 查看当前用户运行的shell
    程序在shell中运行,shell中可运行子shell

    文件类型:
    d 目录。
    l 链接文件(指向另一个文件),类似于WINDOWS快捷方式。
    s 套接字文件。
    b 块设备文件。
    c 字符设备文件。
    p 命名管道文件。
    - 普通文件,或者更准确地说,不属于以上几种类型的文件

    查看名用法:main chmod或者info chmod
    改变文件权限:root用户和文件的拥有者才能够改变文件权限
    命令:chmod
    chmod u+x,g-r,o+x a
    chmod 722 a

    chown 改变文件的拥有者
    chown 用户名 文件名
    chown -R 用户名 文件夹名  可以改变文件夹下所有文件的拥有者
    chgrp 改变文件的组
    chgrp 组名 文件名
    chown root.root 文件夹 -R
     
    umask
    设置创建文件或文件夹的默认权限
    默认为022,可以通过umask 222设置默认权限

    链接
    硬连接和软连接
    ln [-s] source_path target_path
    ln a a_ln   硬链接
    ln -s a a_ln   软链接

    SHELL
    #!/bin/bash
    #hello world
    printchar="hello world"
    echo $printchar

    chmod u+x hello.sh
    ./hello.sh


    别名
    alias
    alias ll='ls -alh'
    别名  $HOME/.bashrc文件中


    命名替换
    myfile的内容
    parm
    findfile

    ls `cat myfile` -al  显示parm findfile文件的信息
    把cat myfile命令的结果传递给ls命令


    后台处理
    nohup command &
    nohup tar -czf parm.tar.gz parm &
    tar -czf parm.tar.gz parm压缩文件


    管道 (|)
    把一个命令的输出连接到另一个命令的输入
    ls|sort  排序

    重定向(< >)
    与管道相关,他可以改变程序运行的输入来源和输入来源
    sort <myfile.txt   对myfile.txt文件中的内容排序
    sort <myfile.txt > myfile_sort.txt 把myfile.txt文件中的内容排序的结果输入到myfile_sort.txt文件中

    模式匹配
    显示以txt为扩展名的文件或显示以a开头的文件,这种能力就称模式匹配
    正则表达式

    特殊符号
    双引号("):用来使Shell无法认出空格、制表符和其他大多数特殊字符,这样"David Medinets"
     表示一个值,而不是2个同样"David < Medinets"表示一个值
    单引号('):用来使shell无法认出所有特殊字符
    反引号(`):用来替换命令
    反斜杠(\):用来使shell无法认出气候的特殊字符,使其后的支付失去了特殊的含义,如David\Medinets
    touch David\ Medinets
    ls David\ Medinets

    分号(;):允许在一行上放多个命令
    & :命令后台执行
    括号():创建成组的命令
    大括号{}:创建命令块
    竖杠(|):管道表示符
    <>&:表示重定向
    *?[]! :表示模式匹配
    $:变量名的开头
    #:表示注释(第一行除外)
    空格、制表符、换行符:当作空白

                                第二章    变量和运算符
                               
    2.1变量
    2.1.1本地变量
    本地变量在用户现在的shell生命期的脚本中使用
    variable_name=vale
    set 显示本地所有的变量
    readonly variable_name 只读变量
    [root@localhost shell]# LOCALTEST="test"  #设置本地变量
    [root@localhost shell]# echo ${LOCALTEST} #查看本地变量
    test
    [root@localhost shell]# readonly LOCALTEST  #设置本地变量为只读
    [root@localhost shell]# LOCALTEST="TEST1"  #设置只读的本地变量,提示变量为只读
    -bash: LOCALTEST: readonly variable
    [root@localhost shell]# readonly  #查看当前shell只读的本地变量

    2.1.2环境变量
    环境变量用于所有用户进程(经常称为子进程)。登录进程为父进程。shell中执行的用户
    进程均称为子进程。不像本地变量(只用于现在的shell),环境变量可用于所有子进程,
    这包括编辑器、脚本和应用
    cat /etc/profile(对所有用户进行设置)或cat $HOME/.bash_profile(对当前用户设置)
    export  设置环境变量或者查看环境变量  export user_path="beij"或export
    env  查看环境变量  env | grep user_path

    2.1.3变量替换
    用变量的值替换它的名字
    echo
    在变量名前加$,使用echo命令可以显示单个变量取值
    [root@localhost ~]# testvar="this is a test"
    [root@localhost ~]# echo $testvar
    this is a test

    替换变量
    testvar="hxy"
    ${testvar}  显示实际值
    ${testvar:+"test"} 如果设置了testvar 则显示其值,否则,为空
    ${testvar:?"errmsg"} 如果未设置testvar 显示用户定义错误信息errmsg
    ${testvar:-"test"} 如果未设置testvar 则显示其值test
    ${testvar :=value} 如果未设置testvar 设置其值,并显示

    2.1.4变量清除
    unset,readonly 不能unset
    unset varable_name
    [root@localhost ~]# testvar="this is a test"
    [root@localhost ~]# echo $testvar
    this is a test
    [root@localhost ~]# unset testvar
    [root@localhost ~]# echo $testvar

    [root@localhost ~]

    2.1.5位置变量
    位置变量表$0,$1...$9
    $0    $1 $2 $3 $4 $5 $6 $7 $8 $9
    脚本名称      F
    向脚本中使用位置参数

    parm文件内容如下:
    echo "这个脚本的名称:$0"
    echo "这是脚本的第1个位置参数:$1"
    echo "这是脚本的第2位置参数:$2"
    echo "这是脚本的第3个位置参数:$3"
    echo "这是脚本的第4个位置参数:$4"
    echo "这是脚本的第5个位置参数:$5"
    echo "这是脚本的第6个位置参数:$6"
    echo "这是脚本的第7个位置参数:$7"
    echo "这是脚本的第8个位置参数:$8"
    echo "这是脚本的第9个位置参数:$9"
    chmod u+x parm
    [root@localhost hxy]# ./parm A B C D E
    这个脚本的名称:./parm
    这是脚本的第1个位置参数:A
    这是脚本的第2位置参数:B
    这是脚本的第3个位置参数:C
    这是脚本的第4个位置参数:D
    这是脚本的第5个位置参数:E
    这是脚本的第6个位置参数:
    这是脚本的第7个位置参数:
    这是脚本的第8个位置参数:
    这是脚本的第9个位置参数:

    向系统命令传递参数
    parm.sh 内容如下:
    #!/bin/bash
    #parm.sh
    find /root/shell -name $1 -print

    [root@localhost shell]# chmod u+x parm.sh
    [root@localhost shell]# ./parm.sh parm
    /root/shell/parm

    2.1.6标准变量
    bash默认建立了一些标准环境变量,可在/etc/profile中定义
    set | grep "TERM"或者echo $TERM
    EXINIT: 初始化vi的参数
    HOME: 主目录
    IFS: linux默认的域,字符与字符之间的间隔
    LOGNAME: 登录用户名  也可以用set |grep "LOG"命令查看
    MAIL: 当前用户邮箱的路径
    MAILCHECK: 当前用户有多个邮箱时
    TERM:终端的类型
    PATH:可执行文件寻找的路径
    TZ:表示时区
    PS1:登录系统的提示符  [root@localhost shell]#
    PS2:
    PWD:当前的目录
    SHELL:当前用户运行的shell
    MANPATH:帮助文档存放的路径
    TERMINFO:终端类型配置信息的路径

    2.1.7特殊变量
    $#(传递到脚本的参数个数)
    $*(以一个单字符串表示所有向脚本传递的参数,与位置变量不同,此选项参数可超过9个)
    $$(脚本运行的当前进程ID号)
    $!(后台运行的最后一个进程的进程ID号)
    $@(与$*相同,但是使用时加引号,并在引号中返回每个参数)
    $-(表示shell使用的当前选项,与set命令功能相同)
    $?(显示最后命令的退出状态,0表示没有错误,其他值表面有错误)

    [root@localhost shell]# vi parm

    echo "这个脚本的名称:$0"
    echo "这是脚本的第1个位置参数:$1"
    echo "这是脚本的第2位置参数:$2"
    echo "这是脚本的第3个位置参数:$3"
    echo "这是脚本的第4个位置参数:$4"
    echo "这是脚本的第5个位置参数:$5"
    echo "这是脚本的第6个位置参数:$6"
    echo "这是脚本的第7个位置参数:$7"
    echo "这是脚本的第8个位置参数:$8"
    echo "这是脚本的第9个位置参数:$9"
    echo "显示参数个数:$#"
    echo "显示脚本全部参数:$*"
    echo "显示进程ID:$$"
    echo "显示前一命令运行后状态:$?"

    [root@localhost shell]# ./parm A B C D E
    这个脚本的名称:./parm
    这是脚本的第1个位置参数:A
    这是脚本的第2位置参数:B
    这是脚本的第3个位置参数:C
    这是脚本的第4个位置参数:D
    这是脚本的第5个位置参数:E
    这是脚本的第6个位置参数:
    这是脚本的第7个位置参数:
    这是脚本的第8个位置参数:
    这是脚本的第9个位置参数:
    显示参数个数:5
    显示脚本全部参数:A B C D E
    显示进程ID:2776
    显示前一命令运行后状态:0

    2.1.8影响变量的命名
    declare
    - 设置或显示变量
    - -f只显示函数名
    - -r创建只读变量(declare和typeset)
    - -x创建转出变量
    - -i创建整数变量
    - 使用+替代-,可以颠倒选项的含义

    export
    用于创建传给子shell的变量
    - --表明选项结束,所有后续参数都是实参
    - -f表明在“名-值”对中的名字是函数名
    - -n把全局变量转换成局部变量。换句话说,命令的变量不再传给shell
    - -p显示全局变量列表

    readonly
    - 用于显示或设置只读变量
    - --表明选项结束
    - -f创建只读变量

    set
    - 设置或重设各种shell

    unset
    - 用于取消变量的定义
    - --表明选项结束
    - -f删除只读变量,但不能取消从shell环境中删除指定的变量和函数。
      如PATH,PS1,PS2,PPID,UID,EUID等的设置
     
    shift[n] n移动的个数
    - 用于移动位置变量,调整位置变量,使$3的值赋予$2,使$2的值赋予$1

    typeset
    - 用于显示或设置变量
    - 是declare的同义词

    2.2引号
    2.2.1引号的必要性
    变量和替换操作,在脚本中执行变量替换时最容易犯的一个错误就是引用错误

    2.2.2双引号
    使用双引号可引用除字符$、`、\外的任意字符或字符串
    ehco -e "ert,$SHELL '\n*china`echo itlab` "
    ert,/bin/bash
    *chinaitlab

    2.2.3单引号
    单引号与双引号类型,不同的是shell会忽略任何引用值。换句话说,如果屏蔽了
    其特殊含义,会将引号里的所以字符,包括引号都作为一个字符串
    ehco -e 'ert,$SHELL '\n*china`echo itlab` '
    ert,$SHELL '\n*china`echo itlab`

    2.2.4
    反引号
    反引号用于设置系统命令的输出到变量。shell将反引号中的内容作用一个系统命令,
    并执行其结果
    [root@localhost shell]# echo "* china`echo itlab`"
    * chinaitlab

    2.2.5
    反斜杠
    如果一个字符有特殊含义,反斜杠防止shell误解其含义,即屏蔽其特殊含义
    下面字符包含有特殊意义,& * + ^ $ ` " | ?
    [root@localhost shell]# echo *
    David Medinets hello.sh myfile myfile.txt parm parm.sh sort
    You have new mail in /var/spool/mail/root
    [root@localhost shell]# echo \*
    *

    2.3运算符
    运算符是对计算机发的指令
    运算对象:数字、字符(字面值);变量;表达式
    表达式:运算符和运算对象的组合体

    2.3.1运算符类型
    按位运算
    ~,<<,>>,$,|,^
    $[ ]表示形式告诉shell对方括号中的表达式求值
    $[2+8]

     运算符                           说明
      ~op1         反运算符,把op1中所有的二进制为1的变为0,0变为1
    op1<<op2     左移运算符,把op1中的二进制位向左移动op2位,忽略最左端移出的各位
                   ,最右段的各位补上0值,每做一处按位左移就实现op1乘以2
    op1>>op2     右移运算符,把op1中的二进制位向右移动op2位,忽略最右端移出的各位
                   ,最左段的各位补上0值,每做一处按位右移就实现op1除以2
    op1&op2     与比较运算符,op1和op2对应位,对于每个二进制位来说,如果二者该位
            都是1,则结果为1,否则结果为0
    op1^op2     异或运算符,比较op1和op2对应位,对于每个二进制位来说,如果二者该位
            互补,则结果为1,否则结果为0
    op1|op2     或运算符,op1和op2对应位,对于每个二进制位来说,如果二者该位
            有一个1或者都是1,则结果为1,否则结果为0
           
    逻辑运算符
      运算符                         说明
      &&            与运算符
      ||            或运算符
    >,==,<,!=              大于,等于,小于,不等于运算符

    赋值运算符
    =,+=,-=,*=,/=,%=,$=,^=,|=,<<=,>>=
    let count=$count+$change
    let count+=$change
     
    2.3.2表达式替换
    $[]和$(())
    习惯使用$[],所有shell的求值都是用整数完成
    $[]可以接受不同基数的数字
    [base#n] n表示基数从2到36的任何基数,表示进制
    echo $[10#8+1]
    9
                 

    运算符的优先级(用括号来改变运算顺序)
    级别         运算符            说明
    13           -,+              正,负
    12      !,~             逻辑或,按位取反或补码
    11      *,/,%            乘,除,取摸
    10           +,-,            加,减
           <<,>>            按位左移,按位右移
         <=,>=,<,>        小于等于,大于等于,小于,大于
          ==,!=          等于,不等于
                        按位与
                       按位异或
                       按位或
          &&             按位与
          ||              按位或
         =,+=,-=,*=,/=,%=,      赋值,运算且赋值
           &=,^=,|=,<<=,>>=
    较高运算级别的运算符先于低级别的运算符进行求值运算

  • 相关阅读:
    Linux服务器在SSH客户端如何实现免密登录
    在linux服务器下JMeter如何执行jmx性能脚本
    单元测试
    JsonPath如何获取JSON数据中的值
    TestNG Suite 运行出现中文乱码如何解决
    Java如何获取JSON数据中的值
    数组的冒泡排序
    java数组扩容
    null类型不能转换成double基本类
    Java 将目录下的文件移动到指定的目录文件下
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480851.html
Copyright © 2011-2022 走看看