语法解释
#!/bin/bash:是shell脚本的第一行,它代表的意思是该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。
# :是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
‘’#‘’ :是单行注释
多行注释可以使用
1 | :<<EOF |
EOF 也可以使用其他符号代替。如:<<! 注视内容!等格式。
- chmod +x:是为脚本设置可执行权限;Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。
变量操作
- 创建普通变量: name=“test” (=两边不可有空格)
- 创建只可函数体中使用的局部变量: local name=“test” (使用local修饰的变量在函数体外无法访问,并且local只能在函数体内使用)
- 使用变量: echo $name 或者 echo ${name} (推荐使用大括号版)
- 变量重新赋值: name=“new_test” (将原值覆盖)
- 只读变量: name=“only_read” -> readonly name (使用readonly标识后的变量,不可被修改)
- 删除变量: unset name; (删除之后不可访问,删除不掉只读变量)
参数传递
- 获取参数值:
- $0 : 固定,代表执行的文件名
- $1 : 代表传入的第1个参数
- $n : 代表传入的第n个参数
- $#:参数个数
- $*: 以一个单字符串显示所有向脚本传递的参数。如”$*“用「”」括起来的情况、以”$1 $2 … $n”的形式输出所有参数
- $@:与$*相同,但是使用时加引号,并在引号中返回每个参数。
- $$:脚本运行的当前进程号
- $!:后台运行的最后一个进程的ID
- $?: 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
- $* 与 $@ 区别
- 相同点:都是引用所有参数。
- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 “ * “ 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。
输出
echo
仅用于字符串的输出,没有使用printf作为输出的移植性好,建议使用printf
printf
printf 不会像 echo 自动添加换行符,我们可以手动添加 \n
无大括号,直接以空格分隔
- 格式:
printf format-string [arguments...]其中(format-string: 格式控制字符串、arguments: 参数列表) - 案例:
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 - %s %c %d %f 都是格式替代符
- d:Decimal 十进制整数 对应位置参数必须是十进制整数,否则报错!
- s:String 字符串 对应位置参数必须是字符串或者字符型 否则报错
- c:Char 字符 对应位置参数必须是字符串或者字符型 否则报错
- f:Float 浮点 对应位置参数必须是数字型 否则报错
%-10s: 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。%-4.2f:指格式化为小数,宽度为4个字符,其中.2指保留2位小数。
文件引用
引用其他的文件之后,可以使用其变量、函数等等,相当于将引用的文件包含进了当前文件
有两种方式:
. file_path\file_name
source file_path\file_name
shell与linux命令的联系
shell是linux命令集的概称,是属于命令行的人机界面。shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
shell与linux命令的区别
1.linux命令直接在命令行执行,就是在当前的shell环境下执行,比如涉及到一些环境变量的时候,必须在当前shell环境里执行。
2.使用Shell脚本执行的话,会fork一个子进程,所有操作都在子进程进行。如果涉及到一些在脚本里设置环境变量的东西,脚本结束了,环境变量也就消失了。 如果是修改环境变量的话,需要特别注意下。
3.shell可以重复或批量地执行一些命令。可以把要重复执行的命令写到脚本里面执行。而命令行的话就需要一个一个的输入命令,相对而言麻烦一些。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 向阳榆木!
评论

