unset

不能删除readonly的变量

实例:

#!/bin/bash

name="lalala"
readonly name
unset name

执行结果:

line5:unset:name:cannot unset:readonly variable

单引号字符的限制

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

实例:拼接字符串

#!/bin/bash
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3

执行结果:

hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !

$* 与 $@ 区别

  • 相同点:都是引用所有参数。
  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
#!/bin/bash

echo "-- \$* 演示 ---"
for i in "$*"; do
echo $i
done echo "-- \$@ 演示 ---"
for i in "$@"; do
echo $i
done

执行脚本,输出结果如下所示:

$ chmod +x test.sh
$ ./test.sh 1 2 3
-- $* 演示 ---
1 2 3
-- $@ 演示 ---
1
2
3

传递参数

$0 为执行的文件名

在为shell脚本传递的参数中如果包含空格,应该使用单引号或者双引号将该参数括起来,以便于脚本将这个参数作为整体来接收。

#!/bin/bash

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

为脚本设置可执行权限,并执行脚本,输出结果如下所示:

$ chmod +x test.sh
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

echo

  • 双引号单引号和啥都不加输出效果是一样的
  • 读取输入:read
  • 功能类似的有printf,不过printf支持格式化输出,功能更强大
#!/bin/sh
read name
echo "$name It is a test"

以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:

[root@www ~]# sh test.sh
OK #标准输入
OK It is a test #输出

函数

格式:

[ function ] funname [()]

{

    action;

    [return int;]

}

说明:

  • 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

下面的例子定义了一个函数并进行调用:

#!/bin/bash

demoFun(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"

输出结果:


-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----

文件引用

格式:

. filename   # 注意点号(.)和文件名中间有一空格

或

source filename

参考:http://www.runoob.com/linux/linux-shell.html

最新文章

  1. 书__Oracle
  2. backbone event 事件订阅 和发布 源码小读
  3. c# 高效读写文件
  4. 高阶函数复习:利用reduce和map把字符串转为数字
  5. 在WIn32程序中使用MFC的CInternetSession运行异常,主要是因为获取目前应用程序名出错的解决办法
  6. Android核心分析 之十Android GWES之基本原理篇
  7. IP报文解析及基于IP 数据包的洪水攻击
  8. sql操作事务SqlTransHelper类实现
  9. xml直接读取节点
  10. nodejs新手教程中upload file的问题
  11. STM32通过FSMC驱动3.2寸液晶屏实现的音乐频谱
  12. 跟着刚哥梳理java知识点——深入理解String类(九)
  13. JWT 简介
  14. Gradle 1.12用户指南翻译——第五十二章. Maven 插件
  15. String的trim()用于去掉字符串前后的空格
  16. 对redux的粗略理解
  17. 信用评分卡 (part 2of 7)
  18. VS2015 新建 ASP.NET Web应用程序, 此模板尝试加载程序集‘Microsoft.VisualStudio.Web.Project’, 解决方案
  19. 关于spring boot在IDE工具中可以启动成功,但是打成jar包以及运行jar包失败的问题
  20. C#_图片存取数据库Winform

热门文章

  1. 辉光UIView的category
  2. [翻译] snapshotViewAfterScreenUpdates
  3. [C++] 用Xcode来写C++程序[3] Constants
  4. java+redis+lua生成自动增长的ID序列号
  5. 【转】【Flex】FLEX 学习网站分享
  6. Promise & Deferred Objects in JavaScript Pt.2: in Practice
  7. jprofiler9.2注册码
  8. 自定义配置编译linux内核
  9. 标绘ol3版开源啦
  10. _viewstart.cshtml的作用