Mac下Shell脚本使用学习笔记(一)
| 参考文献 | Shell 教程 |
|---|---|
| MAC常用终端命令行 | |
| Mac下Shell脚本使用 |
1.使用终端创建test.sh:
(1)进入指定文件夹路径(命令示例:cd Desktop/面向对象程序设计);
(2)创建test.sh文件(命令示例:touch test.sh);

(3)创建第一个Shell脚本:
#!/bin/bash
echo "Hello World!"
注:#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
(4)通过终端运行[附运行 Shell 脚本有两种方法,本文采用第一种]:

注意:
- 一定要输入
./test.sh而不是,tech.sh; - 第一次出现错误
Permission denied,需先输入chmod u+x ./test.sh //使脚本具有执行权限再执行脚本。
2.Shelld的基本语法:
(1)变量:
①定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
your_name="Kenn"
变量命名规则同C语言相同,但有一点注意的地方就是变量名和等号之间不能有空格。
②使用变量时,只要在变量名前面加美元符号即可,如:
your_name="Kenn"
echo $your_name //或者 echo ${your_name}
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。
如:
for skill in Ada Coffe Action Java; do
echo "I am good at ${skill}Script"
done
如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。
推荐给所有变量加上花括号,这是个好的编程习惯。
③已定义的变量,可以被重新定义,如:
your_name="Tom"
echo $your_name
your_name="Kenn"
echo $your_name
这样写是合法的,但注意,第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)。
④只读变量(readonly+变量名,只读变量的值不能被改变)、删除变量(变量被删除后不能再次使用,unset 命令不能删除只读变量)。
⑤变量类型(局部变量、环境变量、shell变量)。
(2)字符串:
字符串可以用单引号,也可以用双引号,也可以不用引号。(优缺点可见参考链接)
①拼接字符串(echo $greeting $greeting_1);
②获取字符串长度(echo ${#printf_name});
③提取子字符串(第一个字符的索引值为 0,与C语言规范相同,echo ${printf_name:1:5}#输出ello,从字符串第2个字符开始截取五个字符);
④查找子字符串(注意:以下脚本中是反引号,而不是单引号):
例:查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)
string="runoob is a great site"
echo `expr index "$string" io` # 输出 4
```</font>
#### <font face="Times New Roman"><font color=Green>(3)数组:</font></font><br/><font face="黑体">
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
①定义数组`数组名=(值1 值2 ... 值n)`:在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。还可以单独定义数组的各个分量,可以不使用连续的下标,而且下标的范围没有限制。
②读取数组:`${数组名[下标]}`,使用`@`符号可以获取数组中的所有元素,例如:`echo ${array_name[@]}`。
③获取数组的长度:获取数组长度的方法与获取字符串长度的方法相同,例如:
```shell
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
(4)Shell 注释:
以#开头的行就是注释,会被解释器忽略。通过每一行加一个#号设置多行注释。
多行注释还可以使用以下格式:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF也可以使用其他符号:
:<<'
注释内容...
注释内容...
注释内容...
'
:<<!
注释内容...
注释内容...
注释内容...
!
(5)Shell 传递参数:
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推。(其中$0为执行的文件名,传递的参数中如果包含空格,应该使用单引号或者双引号将该参数括起来,以便于脚本将这个参数作为整体来接收。)具体,可见参考链接。
$*与$@区别:
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
(6)Shell 基本运算符:
Shell 和其他编程语言一样,支持多种运算符,包括:
- 算数运算符
- 关系运算符(关系运算符只支持数字,不支持字符串,除非字符串的值是数字)
- 布尔运算符
- 字符串运算符
- 文件测试运算符
注意: - 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
- 完整的表达式要被```包含.
- 条件表达式要放在方括号之间,并且要有空格,例如:
[$a==$b]是错误的,必须写成[ $a == $b ]。Shell 中的中括号用法总结 - 乘号(*)前边必须加反斜杠()才能实现乘法运算;
- 在 MAC 中 shell 的 expr 语法是:
$((表达式)),此处表达式中的 "*" 不需要转义符号 "" 。
Mac下Shell脚本使用学习笔记(一)的更多相关文章
- Mac下Shell脚本使用学习笔记(二)
参考文献 Shell 教程 MAC常用终端命令行 Mac下Shell脚本使用 (7)Shell echo命令: 命令格式:echo string ①显示普通字符串:echo "It is a ...
- Shell脚本的学习笔记一:变量
三种变量: 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量. 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需 ...
- Linux Shell脚本编程学习笔记和实战
http://www.1987.name/141.html shell基础 终端打印.算术运算.经常使用变量 Linux下搜索指定文件夹下特定字符串并高亮显示匹配关键词 从键盘或文件里获取标准输入 [ ...
- shell脚本编程学习笔记(一)
一.脚本格式 vim shell.sh #!/bin/bash //声明脚本解释器,这个‘#’号不是注释,其余是注释 #Program: //程序内容说明 #History: //时间和作者 二.sh ...
- shell脚本编程学习笔记(二)linux服务器启动流程
一.linux服务器启动流程 1.bios找到磁盘上的mbr主引导扇区 2.进入grub洁面选择相应的启动内核 3.读取kernel内核文件-/boot/vmlinuz-* 4.读取init的镜像文件 ...
- shell脚本编程学习笔记(三)编写邮件报警脚本
一.shell编写邮件报警脚本 1.POSTFIX邮件服务器准备 a.首先卸载服务器上自带的sendmail rpm -qa sendmail* //查看安装的sendmail rpm -e send ...
- Shell脚本的学习笔记二:字符串
菜鸟教程提供的Shell在线编辑器 Shell 字符串 项目 功能 单引号 原样输出,变量无效.但可用成对单引号嵌套成对单引号输出变量 双引号 定义字符串中附带有变量的命令并且想将其解析后再输出的变量 ...
- Shell脚本入门学习笔记
1.shell操作系统和用户之间.负责解释命令行 2./etc/shells 记录登录系统有效支持shell 3./etc/passwd 最后,有人谁可以看到用户的默认shell 4.直接输入shel ...
- shell脚本编程学习笔记(四)shell操作数据库
一.数据库基本操作 1)登录mysql服务器:mysql -u root -p 密码 2)查看数据库:show databases 3)查看表:show tales from db; 4)查看表结构: ...
随机推荐
- 深入浅出WPF-02.WPF系列目录
WPF系列目录 2. XAML认识 3. XAML语法 4. x名称空间详解 5. 控件与布局 6. 绑定Binding-01 6. 绑定Binding-02 6. 绑定Binding-03 7. 属 ...
- AOJ/树与二叉搜索树习题集
ALDS1_7_A-RootedTree. Description: A graph G = (V, E) is a data structure where V is a finite set of ...
- 数据结构与算法——弗洛伊德(Floyd)算法
介绍 和 Dijkstra 算法一样,弗洛伊德(Floyd)算法 也是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978 年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特 ...
- 2019 年 CNCF 中国云原生调查报告
中国 72% 的受访者生产中使用 Kubernetes 在 CNCF,为更好地了解开源和云原生技术的使用,我们定期调查社区.这是第三次中国云原生调查,以中文进行,以便更深入地了解中国云原生技术采用的步 ...
- 前段--->js
一,java script的引入方式 1,直接在script里书写你的代码 <script> alert("hbflfb")</script> 2,引入额外 ...
- CF125E MST company (凸优化+MST)
qwq自闭的一个题 我来修锅辣!!!!!! 这篇题解!可以\(hack\)全网大部分的做法!!! 首先,我们可以把原图中的边,分成两类,一类是与\(1\)相连,另一类是不与\(1\)相连. 原题就转化 ...
- 洛谷2120 [ZJOI2007]仓库建设(斜率优化dp)
感觉和锯木厂那个题很类似的. 其实这个题还那个题唯一的区别就是\(dp\)转移式子中的\(f\)变成了\(g\) qwq不想多说了 直接看我的前一篇题解吧qwq #include<iostrea ...
- mysql order by语句流程是怎么样的
order by流程是怎么样的 注意点: select id, name,age,city from t1 where city='杭州' order by age limit 1000; order ...
- JSP(java server pages)安装开发和执行环境
JSP是一种动态网页技术标准. 它是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag)的.jsp文件: java程序段:操纵数据库,重新定向网页,发送email等 ...
- HCIP-RSTP
端口角色 根端口(RP): 非根桥收到最优的BPDU配置信息的端口为根端口,(到根桥开销最小的端口),根桥没有根端口. 指定端口(DP): 两非根交换机之间连接的两个端口必有一个为指定端口,比较两个非 ...