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脚本语言,写个简约语法笔记以便随时翻阅
  • 相关阅读:
    go函数
    Linux 查看磁盘容量、查找大文件、查找大目录
    五分钟理解一致性哈希算法(consistent hashing)
    使用Java实现三个线程交替打印0-74
    Python实现IOC控制反转
    Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数
    Yandex Big Data Essentials Week1 Scaling Distributed File System
    Yandex Big Data Essentials Week1 Unix Command Line Interface Processes managing
    Yandex Big Data Essentials Week1 Unix Command Line Interface File Content exploration
    Yandex Big Data Essentials Week1 Unix Command Line Interface File System exploration
  • 原文地址:https://www.cnblogs.com/johnl/p/5244829.html
Copyright © 2011-2022 走看看