shell scripts

Posted skyzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell scripts相关的知识,希望对你有一定的参考价值。

shell scripts 变量、运算、数组、read 编译型语言:优点,执行效率较高;缺点,依赖于编译器 C C++,兼容性不好 解释型语言:程序不需要编译,执行效率相对较低,兼容性好,跨平台;shell、python、ruby、perl 总结: Linux组成:kernel、文件系统、应用程序、shell shell:人机交互的一个桥梁;解释器 打开一个终端(bash的一个接口) | bash bash shell shell的一种 csh sh... | kernel | 硬件 什么是shell脚本? 简单来说,是将一堆命令保存在一个文件中,然后按照顺序去执行。 若干命令+脚本基本格式+脚本特定语法+思想=shell脚本 如何去学习shell脚本? 1、尽可能多的记住一些命令 2、掌握脚本的标准格式(#!魔法字符 指定解释器 /bin/bash /bin/sh ..) 3、必须熟练掌握脚本的基本语法 变量定义 条件判断 分支语句 循环语句 函数 数组 正则表达式、awk、sed 怎么执行脚本: 非标准: # vim 1.sh # bash 1.sh 或 sh 1.sh 或 . 1.sh 或 bash -x 1.sh 脚本文件可以不用有可执行权限;不建议 bash -x 1.sh -x显示脚本执行过程的信息,帮助排错 标准: 1.sh #!/bin/bash 魔法字符,表示该脚本使用哪种解释器去解释 ... # chmod +x 1.sh 脚本要有可执行权限 执行: ./1.sh 相对路径表示该脚本 /shell/shell01/1.sh 绝对路径执行 bash shell的符号: 双引号(""):将引号里的内容当作整体;允许通过$()去引用其他变量 单引号(‘‘):将引号里的内容当作整体;不允许通过$()去引用其他变量 反撇号(``):引号里面的命令优先执行,和$()含义是一样的;如果有嵌套那么不能用``号 $(())和 $[]:运算符 ; :可对命令进行分割;不去考虑上一条命令所执行的结果 &&:逻辑与;可对命令进行分割;但是需要考虑上一条命令所执行的结果 ||:逻辑或;可对命令进行分割;不需要考虑上一条命令执行结果 变量分类: 本地变量:当前用户自定义的变量;当前进程有效,其他进程或者当前进程的子进程无效 eg:# a=123 # echo $a --->123 # unset a 取消变量定义 环境变量:当前进程有效,并且能被子进程调用 # env 查看当前系统的环境变量 # set 查看当前系统的所有变量(包括环境变量,本地变量和临时变量) eg:# HI=hello --# export HI 或者 # export HELLO=abc 全局变量:全局所有用户和进程都能调用,且继承,新建用户也能调用 # vim /etc/profile ---> HI=hello ---export HI 或者 export HELLO=abc 系统变量(bash中内置的变量):shell本身已经固定好的一些变量 $#:脚本后面接参数个数 $*:脚本后面所有的参数 [email protected]:脚本后面所有的参数 $?:上一条命令执行后返回的状态 状态值:0: 非0: 127:command not found(命令未安装或环境变量) 126:找到了命令但是无法执行或权限不够 1&2:没有找到文件或目录 $$:当前进程的进程号 $!:后台运行的最后一个进程号 !$:最后一条命令或参数 !!:最后一条命令的历史记录 位置参数: $0:当前程序的程序名或进程 $1~$9:位置参数变量(第几个变量) ${10}~${n}:位置参数(第几个变量) eg:# vim 2.sh #!/bin/bash echo "$0 = $0" echo "$# = $#" echo "$* = $*" echo "[email protected] = [email protected]" echo "$1 = $1" echo "$2 = $2" echo "$7 = $7" echo "$10 = ${10}" echo "$11 = ${11}" # chmod +x 2.sh # ./2.sh a b c ---> $0 = ./2.sh $# = 3 $* = a b c [email protected] = a b c $1 = a $2 = b $7 = $10 = $11 = # ./2.sh a b c v b f u o p 7 9 --->$0 = ./2.sh $# = 11 $* = a b c v b f u o p 7 9 [email protected] = a b c v b f u o p 7 9 $1 = a $2 = b $7 = u $10 = 7 $11 = 9 变量的定义: 1、默认情况下,变量类型没有什么要求。可以给变量赋任何值,但是等号两边不能有任何的空格。 调用变量: $变量名 ${变量名} ${A:3:3} A:变量名 3:从第3+1位开始截取;0代表从第1位开始 3:截取3位 eg: # A=123456789 # echo $A --->123456789 # echo ${A:2:3} --->345 2、变量名区分大小写 3、变量名不能以数字或者特殊符号开头 4、将命令所执行的结果保存到变量 # a=$(hostname) # echo $a --->node1.uplook.com 5、数组 数组的定义:用小括号扩起来定义数组,括号里的元素用空格隔开 array=(var1 var2 var3) 或者 array[0]=var1 array[1]=var2 array[2]=var3 取值: ${array[0]}:取出数组array中的第一个值 ${array[*]}或 ${array[@]} :取出数组array中所有的值 # user=(user1 user2 user3) for i in ${user[@]} do echo "hello,$i" done # for i in ${user[@]};do echo "hello,$i";done 6、declare 定义有类型的变量 -i:将变量看成整数 -r:定义只读变量 -x:将变量导出到环境变量 -a:将变量看成数组 7、read 交互式定义变量 -p:提示信息 -n:字符数 -t:超时 -s:不显示 8、其他变量 dirname:取出目录 basename:取出文件名 %:从右往左匹配最小程度匹配 %%:从右往左最大程度匹配 #:从左往右匹配关键字 ##:从左往右匹配关键字 # a=/shell/shell01/1.sh # echo ${a%/*} --->/shell/shell01 # echo ${a%%.*}---> /shell/shell01/1 # echo ${a%%/*}--->(没有) # a=hello/shell/shell01/1.sh # echo $a--->hello/shell/shell01/1.sh # echo ${a%%/*}---->hello 简单的四则运算: 默认的四则运算:+ - * / % $(()) $[] expr let eg:a=10 b=2 # echo $(($a+$b)) # echo [$a+$b] # expr 10 + 5 10 * 5(转义) # let n=a+b --->#echo $n

以上是关于shell scripts的主要内容,如果未能解决你的问题,请参考以下文章

什么是Linux的登录shell与非登录shell?

Shell基本概述

交互式shell和非交互式shell,登录shell和非登录shell的区别

shell批量执行多个shell脚本

shell脚本——shell编程规范与变量

Shell系统学习之向Shell脚本传递参数