1.shell脚本解释器

Bourme Shell (/usr/bin/sh 或 /bin/sh )
Bourme Again Shell ( /bin/bash )
C Shell ( /usr/bin/csh )
K Shell ( /usr/bin/ksh )
shell for Root ( /sbin/sh)

bash 由于易用和免费,所以在开发环境中广泛应用

2.第一个shell 脚本

#!/bin/bash
echo "Hello World"

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行。

3.运行脚本有2种方法,
(1) 一种就是把上面的内容保存到test.sh

chmod +x test.sh
./test.sh

(2)另一种是直接运行解释器,其参数就是上面保存的文件名

/bin/sh test.sh

/bin/bash test.sh

这种方式不需要在脚本写解释器信息(#!/bin/bash),写了也没用

4. shell变量

(1)定义规则:
(1) 可以包含字母,数字,下划线,不能有标点符号
(2) 必须以字母或者下划线开头
(3) 大小写敏感
(4) 不能包含bash里面的关键字

(2)使用变量
使用一个定义过的变量,只需在前面加一个$符号
如:

myname="lvyf"
echo "$myname"
ecoh "${myname}"

花括号加不加都行,加上花括号,是让解释器识别变量的边界,如:

echo "this is myname $mynameHaha"
这种 情况不加花括号,解释器就会认为mynameHaha是一个量
正确写法
echo "this is myname ${myname}Haha"

(3)重新赋值

myname="lvyf"
echo "${myname}"
myname="lvyafei"
echo "${myname}"

第二次赋值的时候不用加$ ,只有使用变量的时候才加$符号

(4) 只读变量

myname="lvyf"
echo "${myname}"
readonly myname
myname="lvyafei"

执行会报错:./first_shell.sh:行8: myname: 只读变量

(5) 删除变量

unset myname
echo ${myname}

不会输出任何东西

(6) 变量类型
  1)局部变量:在脚本或命令中定义,仅在当前shell实例中有效,其它shell不能访问该局部变量
  2)环境变量:所有的程序,包括shell启动程序都要访问环境变量,有些程序需要环境变量保证其正确运行,如在脚本执行启动nginx,那么环境变量必须要有nginx的相关配置
  3)shell变量:是由shell程序设置的特殊变量。有一部分是环境变量有一部分是局部变量,这此变量保证了shell的正常运行。

5. shell字符串,字符串可能用单引号,双引号,也可以不用引号

(1) 单引号
  1)单引号里所有的字符都会原样输出
  2)单引号的变量是无效的如

str1='abc'
str2='hello ${str1} '
这段会输出 hello ${str1}

3)单引号里面不可有单引号,转义字符单引号(\')也不行

(2) 双引号
1)双引号可以有变量
2)双引号可以出现转义字符

str="lvyf"
echo "hello \"${str}\" heheh"
输出:hello "lvyf" heheh

(3) 反引号 ` 1左边的按键

反引号里面包含的一般是命令,给当前正在执行的shell强制插入命令,如:

str="lvyf"
echo "hello \"${str}\" heheh `date`"
date就是获取当前时间的命令,打印: hello "lvyf" heheh 2016年 07月 25日 星期一 18:22:47 CST

(4) 拼接字符串

your_name="lvyafei"
greeting="hello ${your_name}"
echo ${greeting}

(5) 获取字符串长度

echo ${#greeting} #输出13

(6) 截取字符串
从第1个字符开始,截取5个字符:

echo ${greeting:0:5} #输出hello

6. shell 数组

  1)定义数组
shell中,用括号表示数组,数组元素用空格分开,定义数组的一般形式

arrt_name=(val1 val2 val3)

或者
arry_name=(val1
var2
val3
val4
) 或者
arry_name[0]=val1
arry_name[3]=val3
可以不使用连续的下标,而且下标范围没有限制

  2)读取数组

${arry_name[0]}

使用@读取数组所有的元素

arry[1]=10
arry[3]=20
echo ${arry[@]} # 打印出10 20

  3)获取数组长度

${#arry_name[@]}
${#arry_name[*]}
${#arry_name[n]}

7.shell 注释 ###

8.shell 参数传递

1)$# 传递到脚本的参数个数
2)$* 传递到脚本的所有参数
3)$@ 传递到脚本的所有参数
4)$? 显示最后命令的退出状态,0表示没有错误,其它任何数字都表示有问题

5)$$ 脚本运行的当前进程的id号
6)$! 后台运行的最后一个进程的id号
7)$-显示Shell使用的当前选项,与set命令功能相同。

$* 和 $@ 的区别
如果传了3个参数 a,b,c ,使用$* 认为就传了一个参数abc 而使用$@ 会认为传了3个参数 a , b ,c

shell--1.shell 相关及变量的更多相关文章

  1. [Linux]Shell的运算符和特殊变量

    说起Shell脚本,免不了用变量.特别是对于这种一堆符号表示变量的语言来说,你不了解一下相关变量的本意,根本无从下手.譬如写个循环遍历,$#就起了好大作用.所以还是有必要记录一下,也是对学习的一个笔记 ...

  2. 『忘了再学』Shell基础 — 13、环境变量(一)

    目录 1.用户自定义的环境变量 (1)环境变量设置 (2)查询自定义环境变量 (3)删除自定义环境变量 2.系统自带的环境变量--PATH环境变量 (1)PATH环境变量 (2)PATH环境变量的作用 ...

  3. 小符号反映大问题,Shell中下划线_与变量的关系。

    之前写过一个根据日期和时间自动命名文件名的时候遇到一个问题. #! /bin/bash read -p "please input the filename:" filename ...

  4. SHELL (2) —— Shell变量的核心基础知识和实践

    摘自:Oldboy Linux运维——SHELL编程实战 Shell变量:用一个固定的字符串(也可能是字符.数字等的组合)代替更多.更复杂的内容,该内容里可能还会包含变量.路径.字符串等其它的内容. ...

  5. shell脚本中特定符合变量的含义

    shell脚本中特定符合变量的含义: $#   传递到脚本的参数个数 $*    以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个 $$    脚本运行的当前进程PID号 ...

  6. Shell学习小结 - 深入认识变量

    移动端访问不佳,请访问我的个人博客 变量的命名 对于初学者来说,可以简单的理解为,变量就是保存在计算机内存中的一系列的键值对. 列如: str="hello" 这里的str就是变量 ...

  7. 利用SHELL脚本修改当前环境变量

    转自http://www.chinaunix.net/old_jh/7/21485.html 1.背景 ---- 在日常的工作中,为了设置一大批环境变量,我们通常编辑了一个shell程序,包含了多个的 ...

  8. (转)Shell常用的特殊位置参数变量说明

    Shell常用的特殊位置参数变量说明 原文:http://m.blog.itpub.net/15498/viewspace-2151142/ $0    获取当前执行的shell脚本的文件名,如果执行 ...

  9. shell脚本—基础知识,变量

    shell脚本本质: 编译型语言 解释型语言 shell编程基本过程 1.建立shell文件 2.赋予shell文件执行权限,使用chmod命令修改权限 3.执行shell文件 shell变量: sh ...

随机推荐

  1. js事件绑定及深入

    学习要点: 1.传统事件绑定的问题2.W3C事件处理函数3.IE事件处理函数4.事件对象的其他补充 事件绑定分为两种:一种是传统事件绑定(内联模型,脚本模型),一种是现代事件绑定(DOM2级模型).现 ...

  2. NOIP2013pj车站分级[拓扑排序]

    题目描述 一条单向的铁路线上,依次有编号为 1, 2, …, n 的 n 个火车站.每个火车站都有一个级 别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车 次停靠了 ...

  3. 3D游戏常用技巧Normal Mapping (法线贴图)原理解析——基础篇

    http://www.cnblogs.com/wangchengfeng/p/3470310.html

  4. IdentityHashMap类:增加相同Key(键)内容的结果

    正常Map操作中,key是不能重复的. 先看使用HashMap()操作,增加相同Key内容的结果: 先看代码: package 类集; import java.util.HashMap; import ...

  5. Metasploit爆破tcpwrapped服务

    转自:http://www.mamicode.com/info-detail-1653722.html 一.利用nmap工具扫描目标主机 1.1 使用nmap命令对目标主机进行扫描. 1.2 在终端中 ...

  6. 2748: [HAOI2012]音量调节 bzoj

    Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改 ...

  7. HttpContext.Current.Session.SessionID相关问题及备忘

    今天Tony提到说我们系统中会利用如下代码来判断用户是否过期. if (string.IsNullOrEmpty(UserContext.ConnectionSessionId)) { LogUIFa ...

  8. 玩蛇记--Python处理海量手机号码

    一.任务描述 上周,老板给我一个小任务:批量生成手机号码并去重.给了我一个Excel表,里面是中国移动各个地区的可用手机号码前7位(如下图),里面有十三张表,每个表里的电话号码前缀估计大概是八千个,需 ...

  9. Web前端面试题目及答案汇总

    HTML/CSS部分 1.什么是盒子模型? 在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边 ...

  10. java中文文档官方下载

    一直在寻找它,今天无意之间终于发现它了! http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/overview-summa ...