shell命令注意点
2024-08-24 16:39:57
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
最新文章
- 书__Oracle
- backbone event 事件订阅 和发布 源码小读
- c# 高效读写文件
- 高阶函数复习:利用reduce和map把字符串转为数字
- 在WIn32程序中使用MFC的CInternetSession运行异常,主要是因为获取目前应用程序名出错的解决办法
- Android核心分析 之十Android GWES之基本原理篇
- IP报文解析及基于IP 数据包的洪水攻击
- sql操作事务SqlTransHelper类实现
- xml直接读取节点
- nodejs新手教程中upload file的问题
- STM32通过FSMC驱动3.2寸液晶屏实现的音乐频谱
- 跟着刚哥梳理java知识点——深入理解String类(九)
- JWT 简介
- Gradle 1.12用户指南翻译——第五十二章. Maven 插件
- String的trim()用于去掉字符串前后的空格
- 对redux的粗略理解
- 信用评分卡 (part 2of 7)
- VS2015 新建 ASP.NET Web应用程序, 此模板尝试加载程序集‘Microsoft.VisualStudio.Web.Project’, 解决方案
- 关于spring boot在IDE工具中可以启动成功,但是打成jar包以及运行jar包失败的问题
- C#_图片存取数据库Winform
热门文章
- 辉光UIView的category
- [翻译] snapshotViewAfterScreenUpdates
- [C++] 用Xcode来写C++程序[3] Constants
- java+redis+lua生成自动增长的ID序列号
- 【转】【Flex】FLEX 学习网站分享
- Promise &; Deferred Objects in JavaScript Pt.2: in Practice
- jprofiler9.2注册码
- 自定义配置编译linux内核
- 标绘ol3版开源啦
- _viewstart.cshtml的作用