zoukankan      html  css  js  c++  java
  • Linux进阶之Shell编程

    1.什么是Shell

    Shell是一个命名行解释器,它为用户提供一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

    2.Shell脚本的执行方式

    1) 脚本以 #!/bin/bash 开头
    2) 脚本需要有可执行权限
    3) hello,word!

    #!/bin/bash
    echo "hello,world!"

    4.执行方式

    有执行权限(x权限)
    1) 相对路径 ./shell.sh
    2) 绝对路径 /root/shell.sh
    sh + 脚本(不需要执行权限,不推荐)
    1) 相对路径 sh ./shell.sh
    2) 绝对路径 sh /root/shell.sh

    5.Shell的变量

    5.1变量介绍

    1. Linux中变量分为系统变量与用户自定义变量
    2. 系统变量如: $HOME$PWD
    3. 查看Shell中所有变量可以用 set

    5.2.变量的定义

    1. 定义变量: 变量=值
    2. 撤销变量:unset 变量
    3. 声明静态变量:readonly 变量(不能unset)

    5.3.变量定义的规则

    1. 变量的名称可以由字母、数字、下划线组成,不能以数字开头
    2. 等号两边不能有空格
    3. 变量名一般习惯大写

    6.将命令的返回值复制给变量

    1. A=`ls -la` 反引号,运行里面的命令,并把结果返回给A
    2. A=$(ls -la) 等价于反引号

    7.设置环境变量

    1. export 变量名=变量值 (将Shell变量输出为环境变量)
    2. source 配置文件 (让修改后的配置信息生效,配置文件在/etc/profile)

    8.位置变量与预定义变量

    8.1.介绍

    当我们执行一个Shell脚本时,如果希望获取到命令行的参数信息,就可以使用位置变量参数,比如 ./shell.sh 100 200 ,这个就是执行Shell的命令行,可以在 shell.sh脚本中获取到参数信息。

    8.2.基本语法

    1.  $n[n为数字,$0就表示命名本身 ./shell.sh,$1-9代表第一个到第九个参数,10以上的参数需要用大括号包裹,${10}]
    2. $* [这个变量代表命令行所有的参数,把参数看做一个整体,类似于一个字符串接收]
    3. $@ [这个变量也代表命令行中所有的参数,会区别对待,类似于数组接收,可以遍历]
    4. $# [这个变量代表命令行中的参数个数]

    8.3.预定义变量

    1. $$ [当前进程的进程号 PID]
    2. $! [后台运行的最后一个进程的进程号]
    3. $? [最后一次执行的命令的返回状态,0表示正确执行了,反之错误,具体数字有命令决定]

    9.运算符

    1. $$((运算式)) 或者 $[运算式]
    2. expr m + n [expr运算符之间要有空格]
    3. expr *,/,%,- 乘,除,取余,减

    10.条件判断

    10.1.基本语法

    [ condition ] 注意:condition前后要有空格,非空返回true,可用$?验证(0为true)

    10.2.常用条件判断

    1. 两个整数的比较

      = 字符串比较
      -lt 小于
      -le 小于等于
      -eq 等于
      -gt 大于
      -ge 大于等于
      -ne 不等于

    2. 按照文件权限进行判断

      -r 有读权限[ -r 文件 ]
      -w 有写的权限
      -x 有执行的权限

    3. 按照文件的类型进行判断

      -f 文件存在并且是一个常规文件
      -e 文件存在
      -d 文件存在并且是一个目录

    11.流程控制

    11.1.if判断

    if[ 条件判断式 ];then
        程序
    fi
    
    if[ 条件判断式 ]
    then
        程序
    elif[ 条件判断式 ]
    then
        程序
    fi

    注意:[ 条件判断式 ],中括号与条件判断式之间必须要有空格,推荐第二种方式

    11.2.case语句

    case $变量名 in 
    "值1")
        如果变量值等于值1,执行程序1
    ;;
    "值2")
        如果变量值等于值2,执行程序2
    ;;
    *)
        如果变量值都不是以上值,执行此程序
    ;;
    esac

    11.3.for循环

    for 变量 in 值1 值2 值3
    do
        程序
    done
    
    for ((初始值;循环控制条件;变量变化))
    do
        程序
    done

    11.4.while循环

    while[ 条件判断式 ]
    do
        程序
    done

    12.read读取控制台输入

    read (选项)(参数)
    1. 选项
    -p 指定读取值时的提示符
    -t 指定读取值时的等待时间(秒),如果没有在指定时间内输入,则不再等待
    2. 参数
    变量 指定读取值得变量名

    13.函数

    13.1.基本介绍

    Shell编程和其他编程语言一样,有系统函数,也可以自定义函数。

    13.2.系统函数

    1. basename [pathname/string] [suffix] 返回完整路径最后/的部分,常用于获取文件名。suffix为后缀,如果suffix被指定,basename会将pathname或string中的suffix去掉
    2. dirname pathname/string 返回文件绝对路径最后/的前面的部分,常用于返回路径部分

    13.3.自定义函数

    1. 语法,调用直接写函数名: funname [值]

    [function] funname [()]
    {
      action;
      [return int;]
    }
    #!/bin/bash
    
    function getSum(){
        SUM=$[$n1+$n2]
        echo "和是=$SUM"
    }
    
    read -p "请输入第一个数=" n1
    read -p "请输入第二个数=" n2
    
    getSum $n1 $n2
  • 相关阅读:
    在python3.x上安装suds 并访问webservice
    numpy nonzero与isnan
    彻底弄清python的切片
    pandas read_sql与read_sql_table、read_sql_query 的区别
    dataframe to sql
    同时替换掉多个字符串
    matplotlib中在for中画出多张图
    MySql 创建/删除数据库
    python3与anaconda2共存
    js调用打印机
  • 原文地址:https://www.cnblogs.com/fdzang/p/11281205.html
Copyright © 2011-2022 走看看