`
wyl15982038375
  • 浏览: 7165 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

shell语法结构

阅读更多
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

条件测试
bash条件测试
     命令执行成功与否即为条件测试
          test EXPR
          [ EXPR ]:注意中括号和表达式之间的空格
     整型测试:
          -gt:大于:例如[ $num1 -gt $num2 ]或者test $num1 -gt $num2
          -lt:小于
          -ge:大于等于
          -le:小于等于
          -eq:等于
          -nq:不等于
     字符串测试:
          > 大于[ "$str1" \> "$str2" ] 注意测试符号左右的空格
          < 小于
          =
          !=

算术运算
let varNamer=算术表达式
varName=$[算术表达式]
varName=$((算术表达式))
varName=`expr $num1 + $num2`
使用这种格式要注意两个数字和+号中间要有空格。

while/until循环

适用于循环次数未知,或不便用for直接生成较大的列表时
格式:
while 测试条件;do
循环体
done
如果测试条件为“真”,则进入循环,测试条件为假,则退出循环。
until循环的格式和while循环的格式一致,但是和while循环的意思相反,如果测试条件为假,则进入循环,退出条件为,测试条件为真

if判断
单分支
if 测试条件;then
选择分支
fi
双分支
if 测试条件
  then
   选择分支1
   else
   选择分支2
   fi
多分支
if 条件1; then
               分支1
          elif 条件2; then
               分支2
          elif 条件3; then
               分支3
          ...
          else
               分支n
          fi

case判断
有多个测试条件时,case语句会使得语法结构更清晰
格式: case 变量引用 in
               PATTERN1)
                         分支1
                         ;;
               PATTERN2)
                         分支2
                         ;;
               ...
               *)
                         分支n
                         ;;
               esac
PATTERN :类同于文件名通配机制,但支持使用|表示或者
a|b:a或者b
*:匹配任意长度的任意字符
?:匹配任意单个字符
[a-z]:指定范围内的任意单个字符

循环控制命令-break
break命令是在处理过程中跳出循环的一种简单方法,可以使用break命令退出任何类型的循环,包括while循环和until循环
1:跳出单循环
2:跳出内循环
使用多循环时break命令自动终止你所在的最里面的循环,注意,当内循环被break命令终止,外循环会继续执行。
3:跳出外循环
可能有时处于内循环但需要停止外循环,break命令后面就需要指定一个参数了
break n
n表明要跳出的循环级别,默认情况下,n是1,代表跳出当前循环,如果将n设置为2,break命令将停止外循环的下一级循环。

循环控制命令-continue
continue命令是一种提前停止循环内命令,而不完全终止循环的方法,这就需要在循环内设置shell不执行命令的条件

自定义函数
function 函数名(){
  ....
}

引用自定义函数文件时,使用source  func.sh
有利于代码的重用性
函数传递参数
函数的返回值,只能是数字

帮助命令
help/man
linux中的命令可以分为两种
内建命令:command is a shell builtin
外部命令:显示具体的路径
如何区分命令属于哪一种
type command
内建命令使用help command
外部命令使用man command

date
显示当前时间
格式化输出 +%Y-%m-%d
格式%s表示自1970-01-01 00:00:00以来的秒数
指定时间输出  --date='2009-01-01 11:11:11'
指定时间输出  --date='3 days ago'

read
read命令接收标准输入(键盘)的输入,或者其他文件描述符的输入。得到输入后,read命令将数据放入一个标准变量中。
格式
read VAR_NAME
read -p "Enter your name:" VAR_NAME
read如果后面不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中
read -t 5 -p "enter your name:" VAR_NAME
read  -s  -p "Enter your password: " pass

declare
-r 只读
-i 整数:某些算术计算允许在被声明为整数的变量中完成,而不需要特别使用expr或let来完成。
-a 数组

字符串操作
获取长度:${#VAR_NAME}
字符串截取
${variable:offset:length}或者${string:offset}
取尾部的指定个数的字符
${variable: -length}:注意冒号后面有空格
取子串:基于模式
${variable#*word}
在variable中存储字串上,自左而右,查找第一次出现word,删除字符开始至此word处的所有内容
${variable##*word}
在variable中存储字串上,自左而右,查找最后一次出现word,删除字符开始至此word处的所有内容
${variable%word*}
在variable中存储字串上,自右而左,查找第一次出现word,删除此word处至字串尾部的所有内容
${variable%%word*}
在variable中存储字串上,自右而左,查找最后一次出现word,删除此word处至字串尾部的所有内容

查找替换:
${variable/pattern/substr}替换第一次出现
${variable//pattern/substr}替换所有的出现
${variable/#pattern/substr}替换行首的pattern,如果行首没有此字符串,则不替换
${variable/%pattern/substr}替换行尾的pattern,如果行尾没有此字符串,则不替换
查找删除
${variable/pattern}删除第一次匹配的字串
${variable//pattern}删除所有匹配的字串
${variable/#pattern}删除行首匹配的字串
${variable/%pattern}删除行尾匹配的字串
注意:pattern可以是一个正则表达式
大小写转换
小-->大:${variable^^}
大-->小:${variable,,}

变量赋值操作
${parameter:-word}
如果变量parameter的值为空或者不存在,返回结果为word,此时变量parameter的值依然为空
${parameter:=word}
如果变量parameter的值为空或者不存在,返回结果为word,此时将word赋值给变量parameter
${parameter:?word}
如果变量parameter的值为空或者不存在,则把word当作错误信息返回。
${parameter:+word}
如果变量parameter的值存在,返回结果为word。如果变量不存在,则返回为空。

数组
定义:declare -a:表示定义普通数组
特点
支持稀疏格式
仅支持一维数组
数组赋值方式
一次对一个元素赋值a[0]=$RANDOM
一次对多个元素赋值a=(a b c d)
按索引进行赋值a=([0]=a [3]=b [1]=c)
命令替换 logs=($(ls /var/log/*.log))
使用read命令read -a ARRAY_NAME
查看元素
${ARRAY[index]}:查看数组指定角标的元素
${ARRAY}:查看数组的第一个元素
${ARRAY
  • }或者${ARRAY[@]}:查看数组的所有元素
  • 获取数组的长度
    ${#ARRAY
  • }
  • ${#ARRAY[@]}
    注意:${#ARRAY[0]}表示获取数组中的第一个元素的长度,等于${#ARRAY}

    从数组中获取某一片段之内的元素
    格式: ${ARRAY[@]:offset:length}
    offset:偏移的元素个数
    length:取出的元素的个数
    ${ARRAY[@]:offset:length}:取出偏移量后的指定个数的元素
    ${ARRAY[@]:offset}:取出数组中偏移量后的所有元素
    数组复制:(建议使用${ARRAY[@]})
    $@:每个参数都是一个独立的串
    $*:所有参数是一个串
    数组删除元素:
    unset ARRAY[index]

    后台模式运行脚本
    在脚本后面加一个&
    test.sh &
    这样的话虽然可以在后台运行,但是当前会话窗口关闭之后这个脚本也会停止运行
    使用nohup test.sh &
    nohup命令将进程和终端分开,所以关闭当前会话窗口不会影响这个进程的执行。
    nohup会在当前执行的目录生成一个nohup.out日志文件

    标准输入、输出、错误、重定向
    标准输入、输出、错误可以使用文件描述符0、1、2引用
    cat  >  catfile  <  ~/.bashrc
    ls >file 或者 ls 1>file(ls >>file)
    lk 2>file(lk是一个错误命令)
    ls >file 2>&1
    ls > /dev/null(把输出信息重定向到无底洞)
    使用重定向可以把信息转换到其他位置

    crontab定时器
    linux下的定时任务
    编辑使用crontab  -e
    一共6列,分别是:分 时 日 月 周 命令
    查看使用crontab -l
    删除任务crontab -r
    查看crontab执行日志
    tail -f /var/log/cron
    tail -f /var/spool/mail/root(查看crontab最近的执行情况)
    查看cron服务状态
    service crond status
    启动cron服务
    service crond start

    ps和jps

    ps:用来显示进程的相关信息
    ps -ef|grep java
    jps:类似linux的ps命令,不同的是ps是用来显示进程,而jps只显示java进程,准确的说是显示当前用户已启动的部分java进程信息,信息包括进程号和简短的进程command。
    问题:某个java进程已经启动,用jps却显示不了该进程进程号,使用ps -ef|grep java却可以看到
    java程序启动后,默认(请注意是默认)会在/tmp/hsperfdata_userName目录下以该进程的id为文件名新建文件,并在该文件中存储jvm运行的相关信息,其中的userName为当前的用户名,/tmp/hsperfdata_userName目录会存放该用户所有已经启动的java进程信息。
    而jps、jconsole、jvisualvm等工具的数据来源就是这个文件(/tmp/hsperfdata_userName/pid)。所以当该文件不存在或是无法读取时就会出现jps无法查看该进程号。
    原因:1,磁盘读写、目录权限问题。2,临时文件丢失,被删除或是定期清理。3,java进程信息文件存储地址被设置,不在/tmp目录下

    分享到:
    评论

    相关推荐

      shell基本语法 (可下载示例代码)

      这些示例脚本文件`if.sh`, `for.sh`, `re.sh`, `case.sh`, `until.sh`, `while.sh`, `fun2.sh`, `fun.sh`分别对应了上述不同的Shell语法结构。通过学习和实践这些脚本,你可以深入了解并掌握Shell编程的基本技能。

      Shell基本语法

      在本文中,我们将深入探讨Shell的基本语法,包括变量、控制结构、函数、输入/输出重定向以及脚本编写。 首先,让我们从Shell变量开始。在Shell中,变量用于存储数据。你可以使用`=`符号来赋值,如`NAME="John"`。...

      shell编程 创建shell脚本 shell 基础语法 shell流程控制语法 shell函数

      下面将详细介绍创建 Shell 脚本、Shell 基础语法、流程控制语法以及如何定义和使用 Shell 函数。 首先,让我们理解一下 Shell 编程的基础。Shell 是操作系统提供的一种命令解释器,用户通过 Shell 与操作系统进行...

      Shell脚本学习教程PDF版

      在“Shell脚本学习教程PDF版”中,你将深入理解Shell脚本的基本概念、语法结构以及高级特性。 首先,Shell脚本的基础包括变量、条件语句、循环结构和函数。变量是存储数据的地方,可以是文本、数字或者其他类型。在...

      Shell知识结构图

      Shell 脚本的编写和执行对于 Linux 初学者来说是一个循序渐进的过程,从简单的命令行操作到复杂的逻辑控制,每一步都需要对 Shell 提供的各种工具和语法有充分的了解。通过实践和不断练习,Linux 初学者可以逐步掌握...

      shell 基本语法

      ### Shell基本语法详解 #### 一、合理使用注释 在Shell脚本中,注释是一种非常重要的元素,它能够帮助我们理解脚本的工作原理,同时也方便后续的维护与更新。注释通常以`#`符号开头,在此之后的内容会被Shell解释...

      Shell编程大全 高清PDF版

      2. **Shell语法** - 条件表达式与测试命令:学习if、elif、else语句,以及test和[[命令]用于条件判断。 - 循环结构:掌握for、while、until循环的用法,以及如何处理数组。 - 函数定义与调用:了解如何在Shell...

      Linux运维-运维系统服务04-Shell脚本d4-Shell循环-12while循环语法结构.mp4

      Linux运维-运维系统服务04-Shell脚本d4-Shell循环-12while循环语法结构.mp4

      Linux运维-运维系统服务04-Shell脚本d4-Shell循环-14while循环语法结构3.mp4

      Linux运维-运维系统服务04-Shell脚本d4-Shell循环-14while循环语法结构3.mp4

      Linux Shell语法速查表 用C语言语法来作对比

      ### Linux Shell语法与C语言语法对比详解 #### 引言 在IT行业中,尤其是在系统管理和自动化运维领域,熟悉Linux Shell编程对于提升工作效率至关重要。然而,由于Shell脚本编写的机会相对较少,很多程序员容易忘记...

      Linux运维-运维系统服务04-Shell脚本d6-Shell函数与正则表达式-05case语句基本语法结构2.mp4

      Linux运维-运维系统服务04-Shell脚本d6-Shell函数与正则表达式-05case语句基本语法结构

      Linux运维-运维系统服务04-Shell脚本d6-Shell函数与正则表达式-04case语句基本语法结构1.mp4

      Linux运维-运维系统服务04-Shell脚本d6-Shell函数与正则表达式-04case语句基本语法结构

      shell常用语法实例

      以下是一些常用的Shell语法及其应用: 1. **命令行参数**: 在Shell脚本中,参数可以使用变量$1, $2等来访问,其中$0代表脚本本身的名字。 2. **变量定义**: 变量赋值使用等号`=`,例如`name="John"`。不需要在变量...

      bash,shell模版 语法 设置文件

      **二、Bash Shell语法** 1. **变量**:在Bash中,变量用于存储数据。声明变量时无需指定类型,如`VAR_NAME=value`。引用变量时,需在其前加上 `$` 符号,如`echo $VAR_NAME`。 2. **命令行参数**:脚本可以通过...

      shell编写 shell编写

      在本文中,我们将深入探讨Shell脚本的基本概念、语法结构、常见命令及其实用技巧,帮助你掌握这一强大的工具。 首先,Shell是什么?Shell是操作系统提供的一种命令解释器,它允许用户通过文本命令与操作系统进行...

      shell编程.pdf

      Shell脚本则是通过编写一系列命令和控制结构来自动化复杂的任务处理过程,从而极大地提高工作效率。《shell编程.pdf》这份资料详细介绍了Shell编程的基础知识和技术要点。 #### 二、Shell编程的重要性 - **节省...

      shell编程的语法规则

      ### Shell编程的语法规则详解 #### 一、Shell编程概览 Shell是连接用户与操作系统的桥梁,尤其是在Unix及类Unix系统(如Linux)中扮演着极其重要的角色。Shell不仅是用户与系统的交互接口,也是一种强大的编程语言...

      shell shell练习 shell入门

      本篇文章将深入探讨Shell的基础知识,包括其概念、重要性、基本语法以及如何进行Shell编程练习。 一、Shell简介 Shell是一个用户与操作系统之间的接口,它接受用户输入的命令并解析成操作系统可以理解的语言,然后...

    Global site tag (gtag.js) - Google Analytics