zoukankan      html  css  js  c++  java
  • linux简单命令与Shell脚本

    说明
    1、#表示root用户登录,$表示普通用户登录
    2、|符号是管道符,用于把|前的输出作为后面命令的输入
    3、>表示追加并覆盖的意思
    4、>>两个大于符号,表示追加

    命令
    1、cd命令:切换目录
    cd /home 进入/home目录
    cd ../返回上一级目录
    cd  ./当前目录
    2、ls命令:产看文件及目录
    ls  ./ 查看当前目录所有的文件和目录
    ls  -a 查看所有的文件,包括隐藏文件,以.开头的文件
    ls -l 查看某个文件或者目录的权限,它以显示数据的第一个字段为准,第一个字段由10个自负组成
    [root@node1 ~]# ls -l monitor_log.sh
    -rw-r--r-- 1 root root 91 May  7 20:21 monitor_log.sh
    第一位表示文件类型,-表示文件,d表示目录;后面每三位为一组。
       第一组:2-4位表示文件所有者的权限,即用户user权限,简称u
       第二组:5-7位表示文件所有者所属组成员的权限,group权限,简称g
       第三组:8-10位表示所有者所属组之外的用户的权限,other权限,简称o
    rwx权限可以用数字来表示,分别表示为r(4)、w(2)、x(1)
    3、pwd命令:显示当前所在的目录
    4、mkdir:创建目录
    mkdir  test ,命令后接目录的名称
    5、rmdir:删除空目录
    6、rm:删除文件或目录
    rm –rf  test.txt (-r表示递归,-f表示强制)
    7、cp:拷贝文件
    cp  old.txt  /tmp/new.txt
    如果拷贝目录需要加 –r参数
    8、mv:重命名或移动文件或目录
    mv old.txt new.txt
    9、touch:创建文件
    touch test.txt 如果文件存在,则表示修改当前文件时间
    10、Useradd:创建用户
    useradd jpc,userdel删除用户
    11、Groupadd:创建组
    groupadd jpc1,groupdel删除组
    12、find:查找文件或目录
    find /home -name "test.txt"
    find 后接查找的目录,-name指定需要查找的文件名称,名称可以使用*表示所有
    find  /home  -name  “*.txt” ;查找/home目录下,所有以.txt结尾的文件或者目录
    13、cat:查看文件内容
    cat test.txt 可以看到test.txt内容
    14、more:查看文件内容
    分页查看,cat是全部查看,如果篇幅较多只能看到最后的篇幅
    可以配合cat使用:
    cat test.txt|more 分页显示text内容
    15、echo:回显
    echo ok 显示ok,输出什么打印什么
    echo  ok  > test.txt 把ok字符覆盖test.txt的内容,>表示追加并覆盖的意思
    echo ok >> test.txt 表示向test.txt文件追加OK字符,不覆盖原文件里的内容
    16、chown 改变某个文件的所有者或者所属的组
    chown -R test:test monitor_log.sh

    vi操作
    命令行模式:vi默认打开就是命令行模式
    文本输入模式:命令行模式下按i进入文本输入模式,按esc进入命令模式,
    末行模式:命令行模式按:进入末行模式
    :wq表示保存退出
    :q!不保存退出



    Shell脚本
    Bourne Again Shell(/bin/bash)
    1、运行脚本:
    作为可执行程序
    需要在第一行指定解释器 #!/bin/bash
    将代码保存到test.sh
    chmod +x ./test.sh #使脚本具有执行权限
    ./test.sh #执行脚本
    作为解释器参数
    /bin/sh test.sh
    /bin/php test.php
    2、Shell变量
    (1)定义变量时,变量名布甲美元符号($,php语言中变量需要)
    you_name="jpc"
    变量名和等号之间不能有空格
    首字符必须字母
    中间不能有空格,可以下划线
    不能使用符号
    不能使用bash里的关键字(可用help命令查看保留关键字)
    (2)使用变量,只用在变量名前加美元符号即可
    you_name="jpc"
    echo $you_name
    echo ${you_name}
    花括号可不写,为了帮助解释器识别变量的边界
    (3)只读变量,使用readonly命令讲变量定义为只读变量
    #!/bin/bash
    myUrl="http://www.w3cschool.cc"
    readonly myUrl
    (4)删除变量,使用unset命令删除变量
    unset variable_name
    unset命令不能删除只读变量
    (5)变量类型
    局部变量:在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
    环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要时,shell脚本也可以定义环境变量
    shell变量:shell变量是由shell程序设置的特殊变量,shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
    (6)Shell字符串
    可用单引号,双引号,也可以不用引号
    单引号:
    单引号里的任何字符都会原样输出,单引号字符中的变量是无效的
    单引号字符串中布恩那个出现单引号(对单引号使用转义字符后也不行)
    双引号:
    双引号里可以有变量
    双引号里可以出现转义字符
    拼接字符串
    you_name="jpc"
    greeting="hello,"$you_name"!"
    greeting_1="hello,${you_name}!"
    echo $greeting $greeting_1
    获取字符串长度
    string="abcd"
    echo ${#string} #输出4
    提取字符串
    string="runoob is a great site"
    echo ${string:1:4} # 输出unoo
    从第二个字符开始截取四个字符
    查找子字符串
    查找字符“i或s”的位置
    string="runoob is a great company"
    echo `expr index "$string" is` #输出8
    `是反引号(英文输入法左上角)
    (7)Shell数组
    bash仅支持一维数组,没限定数组的大小
    定义数组
    括号表示数组,数组元素用空格隔开
    数组名=(值1 值2 值3 ... 值n)
    也可单独定义数组的各分量
    可以不使用连续的下标,而且下标的范围没有限制
    array_name[0]=value0
    array_name[1]=value1
    array_name[n]=valuen
    读取数组
    #{数组名[下标]}
    使用@符号可以获取数组中的所有元素
    #{数组名[@]}
    获取数组的长度
    获取数组长度的方法与获取字符串长度的方法想通
    # 取得数组元素的个数
    length=${#array_name[@]}
    # 或者
    length=${#array_name[*]}
    # 取得数组单个元素的长度
    lengthn=${#array_name[n]}
    (8)Shell注释
    以“#”开头的行就是注释,会被解释器忽略
    sh里无多行注释
    3、Shell传递参数
    可以在执行Shell脚本时,向脚本传递参数,脚本内获取参数的格式为$n n表示一个数字,1为执行脚本的第一个参数,2第二
    $0为执行的文件名
    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数
    如"$*"用"括起来的情况,以"$1 $2"形式输出所有参数
    $$ 脚本运行的当前进程ID号
    $! 后台运行的最后一个进程的ID号
    $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数
    如"$@"用"括起来的情况,以"$1" "$2"形式输出所有参数
    $- 显示Shell使用的当前选项,与set命令功能相同
    $? 显示最后命令的退出状态,0表示没有错误,其他任何值都表明有错误
    4、Shell运算符
    算数运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符
    原生bash不支持简单的数学运算,通过expr来实现
    两个数相加
    #!/bin/bash
    val=`expr 2 + 2`
    echo "两数之和为:$val"
    注意:
    表达式和运算符之间要有空格
    完整的表达式要被``包含,反引号
    算术运算符
    其他类似上述加法,用反引号包含
    条件表达式要放在方括号之间,并且要有空格
    例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]
    关系运算符
    关系运算符只支持数字,不支持字符串,除非字符串的值是数字
    -eq 检测两个数是否相等,相等返回true
    -ne 检测两个数是否相等,不相等返回true
    -gt 检测左边的数是否大于右边的
    -lt 检测左边的数是否小于右边的
    -ge 检测左边的数是否大于等于右边的
    -le 检测左边的数是否小于等于右边的
    布尔运算符
    !非运算,表达式为true返回false
    -o 或运算,有一个表达式为true返回true
    -a 与运算,两个表达式都为true返回true
    逻辑运算符
    假定变量 a 为 10,变量 b 为 20:
    && 逻辑的AND
    [[ $a -lt 100 && $b -gt 100 ]] 返回 false
    || 逻辑的OR
    [[ $a -lt 100 || $b -gt 100 ]] 返回 true
    字符串运算符
    = 检测两个字符串是否相等
    != 检测两个字符串是否不相等
    -z 检测字符串长度是否为0
    -n 检测字符串长度是否不为0
    str 检测字符串是否为空
    if [ $a ]
    then
      echo "$a : 字符串不为空"
    文件测试运算符
    -b file 检测文件是否是块设备文件
    -c file 检测文件是否是字符设备文件
    -d file 检测文件是否是目录
    -f file 检测文件是否是普通文件(既不是目录也不是设备文件),
    -g file 检测文件是否设置了SGID位
    -k file 检测文件是否设置了粘着位(Sticky Bit)
    -p file 检测文件是否是有名管道
    -u file 检测文件是否设置了SUID位
    -r file 检测文件是否可读
    -w file 检测文件是否可写
    -x file 检测文件是否可执行
    -s file 检测文件是否为空(文件大小是否大于0)
    -e file 检测文件(包含目录)是否存在
    5、Shell echo命令
    显示普通字符串
    echo "It is a test"
    显示转义字符
    echo ""It is a test""
    显示变量
    echo "$name It is a test"
    显示换行
    echo -e "OK! " # -e 开启转义
    显示不换行
    echo -e "OK! c"
    显示结果定向至文件
    echo "It is a test" > myfile
    原样输出字符串,不进行转义或取变量(用单引号)
    echo '$name"' 输出 $name"
    显示命令执行结果
    echo `date`
    6、Shell printf命令
    printf format-string [arguments...]
    printf "%-10s %-8s %-4.2f " 郭靖 男 55.1234
    郭靖 男 55.12
    %s %c %d %f都是格式替代符
    %-10s指一个宽度为10的字符(-表示左对齐,没有则表示右对齐))
    不足补空格,超过会全部显示
    %-4.2f 格式化为小数,.2指保留两位小数
    printf转义序列
    a 警告字符,通常为ASCII的BEl字符
     后退
    c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效)而且,任何在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符都被忽略

  • 相关阅读:
    介绍本近期出的好书《软件调试》
    【转贴】Ogre的官僚主义批判
    Module切换,如何实现loading效果
    cacheAsBitmap = ‘true' 可以降低cpu,提高效率?
    设相对布局,则x,y更改无效 horizontalCenter="0" verticalCenter="120"
    flex 1119错误 找不到属性 static 解决方法,编译选项中选中 不启用rsl
    as3的get,set方法实现
    flex的Release编译会把trace也编译进去,
    Alert按钮的事件侦听
    一天编程发现的css名称问题,不支持下划线
  • 原文地址:https://www.cnblogs.com/luchenhui/p/10596565.html
Copyright © 2011-2022 走看看