zoukankan      html  css  js  c++  java
  • Shell脚本简介 — 持续更新

    一、什么是Shell脚本

    1. Shell脚本是用户与Linux操作系统沟通的桥梁;
    2. Linux的Shell种类较多,因bash易用、免费,并且多数Linux系统默认的Shell是Bash。

    二、Shell脚本文件格式

    • 文件名后缀通常是.sh
    1 #!/bin/bash
    2 #或者
    3 #!/bin/sh

    三、脚本任何执行?

    • a.sh  需保证脚本有执行权限并在环境变量中有(.),这样在执行时会从当前目录查找
    • ./a.sh  需保证脚本有执行权限
    • /usr/local/a.sh  需保证脚本有执行权限
    • bash a.sh  可直接执行,甚至脚本文件中不需引入/bin/bash,它将a.sh作为参数传给bash/sh命令来执行

    四、变量

    • 变量不需要声明且初始化不需要指定类型
    • 变量命名要求:(1)、不能使用程序中的保留字;(2)、变量由字母、数字、下划线组成,且不能以数字开头;(3)、建议命令要通俗易懂
    • 显示变量值使用echo $变量名,也可使用${变量名}:如echo $JAVE_HOME 或 echo ${JAVA_HOME}
    1. 变量的分类:本地变量、环境变量、局部变量、位置变量、特殊变量

      (1)、本地变量

    • 只对当前shell进程有效,对当前进程的子进程及其他shell进程无效;
    • 定义:VAR_NAME=VALUE
    • 变量引用:${VAR_NAME}
    • 取消变量:unset VAR_NAME
    • 类比:相当于java中的私有变量,只能当前类使用,子类和其他类无法使用

      (2)、环境变量

    • 自定义的环境变量只对当前shell及其子shell进程有效,对其他shell进程无效
    • 定义:export VAR_NAME=VALUE
    • 对所有shell进程都有效则需要配置到/etc/profile文件中,并source /etc/profile使生效
    • 类比:相当于java中protected修饰符,对当前类和当前类的子孙类,以及同一个包下面可以共用

      (3)、局部变量

    • 在函数中调用,函数执行结束时变量会消失
    • 对shell脚本中某代码片段有效
    • 定义:local  VAR_NAME=VALUE
    • 相当于java代码某个方法中定义的变量,只对这个方法有效

      (4)、位置变量

    • $1,$2.....${n}
    • test.sh 20 30  —>$0:脚本自身;$1:脚本的第一个参数;$2:脚本的第二个参数
    • 相当于java main函数中的args参数,可以获取外部参数

      (5)、特殊变量

    • $?:接收上一条命令的返回状态码(取值区间:0~255)

    • $#:参数个数
    • $*或$@:所有的参数
    • $$:获取当前shell的进程号(可实现脚本自杀,或使用exit命令直接退出、或使用exit[num])

    五、单引号、双引号、反引号

    • "        单引号不解析变量
    • ""       双引号会解析变量
    • ``  反引号是执行并引用一个命令的执行结果,类似于$(...)

    六、for循环

    格式1
    for ((i=0;i<10;i++))
    do
      ...
    done
    
    格式2
    for i in 0 1 2 4 5  8 9 
    do 
    ...
    done
    
    格式三
    for i in {0..9}
    do
      ...
    done

     七、条件测试

    1. bash条件测试

    命令执行成功与否即为条件测试
    test EXPR
    [ EXPR ]:注意中括号和表达式之间的空格

      2. 整型测试:

      -gt:大于:例如[ $num1 -gt $num2 ]或者test $num1 -gt $num2
      -lt:小于
      -ge:大于等于
      -le:小于等于
      -eq:等于
      -nq:不等于
      3. 字符串测试:
      > 大于[ "$str1" > "$str2" ] 注意测试符号左右的空格
      < 小于
      = 等于
      !=不等于

    #!/bin/bash
    while [ 1 -eq 1 ]
    do
    
    for ((i=0;i<10;i++))
    do
    if [ $i -eq 2 ]
    then
    break
    fi
    echo $i
    done
    echo '*********'
    sleep 3
    done
    #!/bin/bash
    while [ 1 -eq 1 ]
    do
    
    for ((i=0;i<10;i++))
    do
    if [ $i -eq 2 ]
    then
    #break 默认值为1,表示跳出第一层循环;值为2时,表示跳出第二层循环
    break 2
    fi
    echo $i
    done
    echo '*********'
    sleep 3
    done

    Linux 帮助命令

    • help/man
    • linux中的命令可以分为两种,内建命令:command is a shell builtin;外部命令:显示具体的路径
    • 如何区分命令属于哪一种:type command
    • 内建命令使用help command,外部命令使用man command
    [xfvm@xfvm01 ~]$ type cd
    cd is a shell builtin

     [xfvm@xfvm01 ~]$ type ls
     ls is aliased to `ls --color=auto'

      [xfvm@xfvm01 ~]$ type date

    date is /bin/date
    [xfvm@xfvm01 ~]$
  • 相关阅读:
    js 动态创建HTML元素
    ASP.NET的几种主要文件
    【荐】Asp.net对文件夹和文件的操作类
    201920201学期 20192415 《网络空间安全专业导论》第二周学习总结 第五章
    201920201学期 20192415《网络空间安全专业导论》第一周学习总结 第二章
    201920201学期 20192415 《网络空间安全专业导论》第二周学习总结 第四章
    201920201学期 20192415 《网络空间安全专业导论》第一周学习总结 第三章
    C# 自动生成类
    div左右布局
    EFCodeFirst安装失败(包括EntityFrameWork安装)解决方案
  • 原文地址:https://www.cnblogs.com/MrFee/p/xiaofei_shell1.html
Copyright © 2011-2022 走看看