zoukankan      html  css  js  c++  java
  • Shell脚本傻瓜学习笔记

    Shell是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁

    Shell既是一种命令语言,又是一种程序设计语言

    作为命令语言,它交互式解释、执行用户输入的命令

    作为程序设计语言,它定义了各种变量、参数,并提供许多在高级语言中才有的控制结构,包括循环、分支

    Shell执行命令方式

    交互式

    解释、执行用户的命令,用户输入一条命令,Shell解释、执行一条

    批处理

    用户事先写一个Shell脚本,Shell一次性执行完多条命令,不必逐条敲命令

    Shell脚本解释器

    常见的有:bash、sh、ash、csh、ksh

    sh是Bourne Shell的缩写,是Unix默认标准的shell

    bash是Bourne Again Shell的缩写,是linux默认标准的shell;本文就是基于bash

    Shell脚本语言与编译型语言差异

    脚本编程语言好处是它们多半运行在比编译型语言还高的层级,能轻易处理文件与目录之类的对象

    编译型语言

    这类语言需预先将编写好的源代码转换成目标代码,这个过程被称为编译

    如C、C++、Java

    解释型语言

    解释型语言也称为脚本语言;执行这类程序时,解释器需读取编写好的源代码,并将其转换成目标代码,再由计算机运行

    因执行程序时多了编译过程,因此效率有所下降,通常不如编译型语言

    如Perl、Python、Ruby与Shell

    Hello, World

    #!/bin/bash
    echo "Hello, World"
    

    保存文件为hello.sh,保存格式为.sh

    作为可执行程序

    chmod +x ./hello.sh #更改文件权限为可执行程序
    ./hello.sh #执行程序

    作为解释器参数

    hello.sh
    

    Shell变量

    变量声明调用

    #!/bin/bash
    lang="Hello, World"
    echo $lang #简便
    echo ${lang} #更标准

    只读变量

    #!/bin/bash
    lang="Hello, World"
    readonly lang #只读
    lang="Bye" #报错

    删除变量

    #!/bin/bash
    lang="Hello, World"
    unset lang #删除
    echo lang #空
    

    交互式变量

    #!/bin/bash
    echo "What is your name"
    read name #用户敲击输入自己的姓名
    echo "Hello, $name" #输入的姓名(注:必须为双引号)
    

    特殊变量

    $0	#当前脚本文件名
    $n	#传递给脚本或函数的参数
    $#	#传递给脚本或函数的参数个数
    $*	#传递给脚本或函数的所有参数
    $@	#传递给脚本或函数的所有参数
    $?	#上个命令的退出状态或函数的返回值
    $$	#当前Shell脚本进程ID

    替换变量

    ${var}			#原值
    ${var:-word}	#原值为空或已删除,返回word,但不改变原值
    ${var:=word}	#原值为空或已删除,返回word,更改原值为word
    ${var:?message}	#原值为空或已删除,将消息message传送至标准错误输出
    ${var:+word}	#原值被定义,返回word,但不改变原值

    转义字符

    \	#反斜杠
    a	#警告
    	#退格
    f	#换页
    
    	#换行
    
    	#回车
    		#水平制表符
    v	#垂直制表符

    Shell运算符

    算术运算符

    +	#加法
    -	#减法
    *	#乘法
    /	#除法
    %	#取余
    =	#赋值
    ==	#相等
    !=	#不相等
    

    算数运算符用法示例

    #!/bin/bash
    number=`expr 5 + 5` #加法
    echo $number
    

    关系运算符

    -eq	#是否相等
    -ne	#是否不相等
    -gt	#是否大于
    -lt	#是否小于
    -ge	#是否大于等于
    -le	#是否小于等于
    

    关系运算符用法示例

    #!/bin/bash
    if [ 5 -eq 5 ] #是否相等(注:必须空格分开)
    then
    	expression
    fi
    

    字符串运算符

    =	#字符串是否相等
    !=	#字符串是否不相等
    -z	#字符串长度是否等于0
    -n	#字符串长度是否大于0
    str	#字符串是否为空

    布尔运算符

    !	#非
    -o	#或
    -a	#且
    

    文件运算符

    -b file	#文件是否是块设备文件
    -c file	#文件是否是字符设备文件
    -d file	#文件是否是目录
    -f file	#文件是否是普通文件
    -g file	#文件是否设置SGID位
    -k file	#文件是否设置粘着位
    -p file	#文件是否是具名管道
    -u file	#文件是否设置SUID位
    -r file	#文件是否可读
    -w file	#文件是否可写
    -x file	#文件是否可执行
    -s file	#文件是否为空
    -e file	#文件是否存在

    Shell字符串

    拼接字符串

    #!/bin/bash
    lang="World"
    echo "Hello, "$lang
    echo "Hello, $lang"
    

    获取字符串长度

    #!/bin/bash
    lang="Hello, World"
    echo ${#lang}
    

    提取字符串

    #!/bin/bash
    lang="Hello, World"
    echo ${lang:1:4}
    

    查找子字符串

    #!/bin/bash
    lang="Hello, World"
    echo `expr index "$lang" llo`

    Shell数组

    数组声明

    #!/bin/bash
    array=(value value)
    

    #!/bin/bash
    array=(
    	value
    	value
    )
    

    #!/bin/bash
    array[0]=value
    array[1]=value
    

    数组调用

    #!/bin/bash
    array=(value value)
    echo ${array[index]} #输出元素
    echo ${array[*]} #输出所有元素

    获取数组长度

    #!/bin/bash
    array=(value value)
    echo ${#array[*]}
    

    获取数组元素长度

    #!/bin/bash
    array=(value value)
    echo ${#array[index]}
    

    Shell if else语句

    if ... fi

    #!/bin/bash
    if [ condition ]
    then
    	expression
    fi
    

    if ... else ... fi

    #!/bin/bash
    if [ condition ]
    then
    	expression
    else
    	expression
    fi

    if ... elif ... fi

    #!/bin/bash
    if [ condition ]
    then
    	expression
    elif [ condition ]
    then
    	expression
    else
    	expression
    fi

    Shell case语句

    #!/bin/bash
    case value in
    	model)
    		expression
    	;;
    	model)
    		expression
    	;;
    	*)
    		expression
    	;;
    esac

    Shell for循环

    #!/bin/bash
    for v in value
    do
    	echo $v
    done

    Shell while循环

    #!/bin/bash
    while [ condition ]
    do
    	expression
    done

    Shell until循环

    #!/bin/bash
    until [ condition ]
    do
    	expression
    done

    Shell函数

    函数声明调用

    #!/bin/bash
    function ()
    {
    	expression
    }
    function

    函数传参

    #!/bin/bash
    function value value

    参数调用

    $n	#传递给函数的参数
    $#	#传递给函数的参数个数
    $*	#传递给函数的所有参数
    $@	#传递给函数的所有参数
    $?	#函数返回值

    Shell文件包含

    #!/bin/bash
    . file
    source file
    
    最近研究Linux服务器的时候,抽空学习了Shell脚本语言,写个简约语法笔记以便随时翻阅
  • 相关阅读:
    测试
    CF868F Yet Another Minimization Problem
    MySQL常用命令
    mysql 5.7.18 winx64安装配置方法
    重装win7系统并激活
    JAVA创建子进程并处理waitFor() 阻塞问题
    Some code changes cannot be hot swapped into a running virtual machine
    java开发手册(阿里巴巴)——编程规约(部分)
    java——File
    OpenModelica Debug
  • 原文地址:https://www.cnblogs.com/johnl/p/5244829.html
Copyright © 2011-2022 走看看