shell既是命令解释程序,又是一种高级程序设计语言。shell是解释型语言。

  1. bash脚本的建立和运行:

  注释行以#开头

  #!后面的参数告诉系统执行本文件的程序

  执行脚本文件有两种方法:

1.   /bin/bash scp1

2.   chmod u+x scp1

./scp1

 2. shell的变量:

1. 比较重要的环境变量:$HOME, $PATH, $0, $1~$9, $*, $@, $#, $$, $?, $!

2. 用户自定义变量:

    一个bash变量默认是一个字符串。

    bash不一定要声明变量,但是有些特殊类型的变量必须要声明,可以使用declare或者typeset命令来声明变量,对它们进行初始化,并设定它们的属性。

declare [options] [name[=value]]

    typeset [options] [name[=value]]

    常用选项:-a 数组,-f 函数,-i 整数,-r 只读,-x 变量可被子进程访问

    bash变量不一定要在使用前声明或初始化,一个没有声明没有初始化的变量的初值是一个空串。

    声明一个现有的变量并不会改变这个变量的当前值。

    注意变量赋值时,=号前后不能有空格,如果值有空格,必须加“”。

    一个整形变量不能被赋予非整形的变量,非整形的变量可以赋予任何值。

    unset[name-list]  重设或删去name-list中的变量值或者函数

    在shell中,可以通过在变量名前加一个$符号来访问它的内容,当为变量赋值时,不要使用$符号。

    “”内解释$,`,\符号,‘’内则不解释,\可以去除这些字符的特殊含义。

    $(command)或者`command` ,shell把它替换为这个命令的输出结果,这个过程称为命令替换。

    read [options] variable-list  将用户的输入值赋值给一个shell变量

    常用选项:-a name 读入name中去,-e 一整行读入第一个变量,-n 光标任停留在同一行,-p prompt 如果是从终端输入,显示prompt字符串

  1. shell脚本位置参数的传递:

    在Linux中运行命令或者脚本程序时,可以在命令行中进行参数的传递,前9个参数的值被存放在shell环境变量$1到$9中。但脚本程序的参数多于9个时,用shift命令来使    用多于9个的参数。

    位置参数的值可以用set命令来设置。

  1. 控制结构语句:

    if-then-elif-else-fi

    表达式expression可以用test expression命令或[expression]来检测,这个命令检测一个表达式并返回true还是false。注意:在操作数和操作符或者括号的前后都要至    少留一个空格。

    test命令可以使用的条件类型可以归为三类:字符串比较、算数比较、与文件有关的条件测试。

    for variable [in argument-list]

    do

      command-list

    done

    while expression

    do

      command-list

    Done

    until expression

    do

      command-list

    done

    case variable in

pattern1)

command-list;;

pattern2)

command-list;;

*)

command-list;;

    esac

  1. 其他几个有用的语句:

    break、continue、exit、printf(不支持浮点数)

  1. 数值处理:

    在linux系统中bash变量的值是以字符串方式存储的,如果需要进行算术和逻辑操作,必须先转换为整数,得到运算结果后再转换为字符串。

    bash提供了三种方式对数值数据进行算术运算:

      1. let express-list   express-list中使用shell变量,无需加$。

      2. $((expression))   express中使用shell变量,无需加$。

      3. expr命令:  x=$(expr $x + 1)

  1. 数组:

    可以使用declare、local、readonly等语句声明数组变量,也可以直接赋值的方法声明一个数组:

    ns=(max san [6]=zhang [25]=wang)

    echo ${ns[6]}

    a=("${ns[@]}")    原数组跟先数组一样

    b=("${ns[*]}")     原数组的所有值赋值给先数组的第一个元素

    size=${#ns[*]}   ${#ns[5]}  第6数组单元的大小,以字节为单位

  1. 函数:

    function_name() {

      command-list

    }

    当一个函数被调用时,位置参数$*、$@、$#、$1~$9会被替换为函数的参数。

  1. here文档:

    它允许一条命令在执行时,就好像在读取一个文件或键盘一样,而实际上是从脚本程序中得到输入数据。

    command<<[-]input-marker

    …input data…

    input_marker

  1. exec命令:

    使用exec内部命令来执行新的命令以替换当前的shell进程,而不是生成一个新的进程。命令结束时,返回父进程,而不是调用它的进程(也就是被覆盖的进程)。

    可以通过exec命令来重定向,但重定向之后,shell不会返回标准终端,除非执行exec</dev/tty或exec>/dev/tty

  1. trap命令:

    trap命令用于指定在接收到信号后,将要采取的行动。trap命令的一种常见用途是在脚本程序被中断时完成清理操作。信号被保存在signal.h中,使用信号名时,可以省略    SIG前缀,trap -l查看信号编号及关联的名称。

    trap ['command-list'] [signal-list]

    trap - signal-list  返回默认动作

    trap '' signal-list  忽略信号

    kill -l   列出所有信号

  1. 调试脚本程序(略)

Bourn Again Shell编程的更多相关文章

  1. Linux学习笔记(17) Shell编程之基础

    1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find ...

  2. shell编程:定义简单标准命令集

    shell是用户操作接口的意思,操作系统运行起来后都会给用户提供一个操作界面,这个界面就叫shell,用户可以通过shell来调用操作系统内部的复杂实现,而shell编程就是在shell层次上进行编程 ...

  3. Linux Shell编程入门

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  4. Shell编程菜鸟基础入门笔记

    Shell编程基础入门     1.shell格式:例 shell脚本开发习惯 1.指定解释器 #!/bin/bash 2.脚本开头加版权等信息如:#DATE:时间,#author(作者)#mail: ...

  5. Linux_10------Linux之shell编程------变量

    .-9 vim num.sh #! /bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) #变量sum是num1和num2的综合 echo $sum 执行 ./ ...

  6. 需要交互的shell编程——EOF(转载)

    在shell编程中,”EOF“通常与”<<“结合使用,“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“, 再次返回到主调shell,可将其理解为分 ...

  7. ****CodeIgniter使用cli模式运行,把php作为shell编程

    shell简介 在计算机科学中,Shell俗称壳(用来区别于核).而我们常说的shell简单理解就是一个命令行界面,它使得用户能与操作系统的内核进行交互操作. 常见的shell环境有:MS-DOS.B ...

  8. Shell 编程基础之变量和环境变量

    一.变量赋值和引用 Shell 编程中,使用变量无需事先声明,同时变量的命名不惜遵循如下规则: 首个字符必须为字母(a-z,A-Z)或者_ 变量名中间不能有空格,可以使用_连接 不能使用其他表达符号 ...

  9. Linux Shell编程基础

    在学习Linux BASH Shell编程的过程中,发现由于不经常用,所以很多东西很容易忘记,所以写篇文章来记录一下 ls   显示当前路径下的文件,常用的有 -l 显示长格式  -a 显示所有包括隐 ...

随机推荐

  1. SAP HANA创建层次结构的属性视图(Hierarchy Attribute View)

    在产品表中,数据是具有一定层次结构的 1. 在Content相应的package下面右键点击Attribute View,新建Attribute View 填写相关信息,注意:我们所建的依然是标准视图 ...

  2. tcp协议栈

    TCP/IP是互联网的核心协议,也是大多数网络应用的核心协议.就前面一段时间面试中问到的TCP/IP问题,这里给出一个简单的小结.   TCP由RFC793.RFC1122.RFC1323.RFC20 ...

  3. PowerCmd(命令行增强工具) 2.2 免费版

    软件名称: PowerCmd(命令行增强工具) 2.2 免费版 软件语言: 英文 授权方式: 免费软件 运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 1.8MB ...

  4. 汉字转全拼音函数优化方案(SQLServer),值得你看看

    函数要求实现功能 select 函数名 ('你好,我是追索') 返回的结果(ni hao , wo shi zhui suo) 解决方案一: 解决方案一 /* 根据汉字获取全拼 1.生成所有读音临时表 ...

  5. sqlserver 优化相关

    http://www.cnblogs.com/studyzy/archive/2008/11/24/1339772.html http://blog.csdn.net/dba_huangzj/arti ...

  6. python join()阻塞的用法

    join()阻塞的用法,用来检测线程有没有完全执行完毕 #!/usr/bin/env python#-*- coding:utf-8 -*-import threadingimport time de ...

  7. Android: Failure [INSTALL_FAILED_DEXOPT] and Failure [INSTALL_FAILED_UID_CHANGED] 解决方案

    1. 错误:  Failure [INSTALL_FAILED_DEXOPT]  Android安装App时 D:\WorkSpace\Administrator\workspace\svn\soot ...

  8. github import repository创建github仓库

    现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆. 首先,登陆GitHub,创建一个新的仓库,名字叫blog: 1.先创建一个项目仓库 2. 我们勾选Initialize th ...

  9. Jquery - UI - Dialog(转)

    jQuery UI Dialog常用的参数有: 1.autoOpen:默认true,即dialog方法创建就显示对话框 2.buttons:默认无,用于设置显示的按钮,可以是JSON和Array形式: ...

  10. 学到的较复杂的 mysql 语名

    需求是这样的:需要找出没有发任务的店铺是哪些.好让客服去联系他们,询问情况. 每个商家可以有N个店铺,每个店铺可以放N个任务,一个任务会生成N个任务订单,会员接到任务去完成 SELECT *FROM ...