什么是shell脚本(shell script)
简单来说就是将在Linux中命令行整合成一个程序,这就是shell script
如何使用shell script
first step:开始编辑shell script
有多种编译方式,这里我们可以使用vim来编辑
vi filename
second step: 进入编辑器
在编辑器中,我们可以使用i来开始编辑,用 :wq 来保存并退出,不想保存时可以用 :q 直接退出。
#!/bin/bash
我们使用以上代码段开头来表示编译器的选择,不可缺少。
third step: 开始输入你要做的内容
forth step: 如何运行
首先先进行编译
>>sudo chmod u+x filename.sh
编译成功后,使用ls你会发现文件名被高亮。 之后我们可以通过./来进行运行
>>./filename.sh par1 par2
par1代表传入参数1,par2代表传入参数2,…以此类推,可以传多个参数
下面补充一些常用的小Tips
简单介绍一下
- 赋值采用
var_name=…
var_name可以随意你定,注意等号前不要跟空格
如果有var=var+1之类的写法,会报错,应该写为
let var=var+1
- for循环
基本框架
for var in array#var为你要遍历的东西,array为你要遍历的范围,用法类似于python
do
if ...
then
...
else
...
fi
done
- 函数用法
#函数定义
function function_name(){
...
#函数递归调用:par1为参数1,par2为参数2
function_name par1 par2 ...
...
}
#函数调用:par1为参数1,par2为参数2
function_name par1 par2 ...
- 符号介绍
“ * ”表示通配符,用于匹配字符串将被删除的字串。
“.”表示字符串中分隔符,可以为任意一个或 多个字符。
“%”表示从右向左匹配,
“#”表示从左向右匹配,
“ \ ”表示替换,都属于非贪婪匹配,即匹配符合通配符的最短结果。
与“%”、“#”和“/”
类似的有“%%”、“##”和“//”,都属于贪婪匹配,即匹配符合通配符的最长结果。
举几个栗子哈:
#删除VALUE字符串中以分隔符“.”匹配的右边字符,保留左边字符。
${VAR%.*}或${VAR%%.*}
#VAR代表变量名,%代表从右往左匹配,“.*"表示删除"."后面的字符。而外部的${}代表取值
#删除VALUE字符串中以分隔符“.”匹配的左边字符,保留右边字符。
${VALUE#*.}或${VALUE##*.}:
#VAR代表变量名,%代表从右往左匹配,“.*"表示删除"."后面的字符。而外部的${}代表取值
${VALUE/OLD/NEW}或${VALUE//OLD/NEW}
补充:${#VALUE}:计算VALUE字符串的字符数量。
- 参数的使用
使用shell脚本的时候,我们可以传入一些参数进去。
>>./filename.sh par1 par2 ...
其中par1代表的是参数1,par2是参数2,那在shell脚本内,我们该怎么调用呢?
echo $1 #表示输出参数1
echo $2 #表示输出参数2
....
这里大家应该比较清楚了,$1代表的是参数一。$2代表的是参数2…以此类推
- 变量的使用
shell里的变量的使用方法比较类似于Python,在使用时不需要声明类型。
比如我们要定义一个目录为pDir目录下的文件file,我们可以这么写
#假设pDir="/home",file=filename
dir=$pDir"/"$file
这段代码将dir赋值为file的路径。此时dir的值为“/home/filename"。
这里我们使用用**$**表示取值。
我们可以尝试另一段代码感受一下
#假设pDir="/home",file=filename
dir=pDir"/"file
此时dir的值将被定义为"pDir/file"
这样大家应该能感受到以下几点
1. 变量类型无需声明,直接使用varname=value这样的赋值即可。
2. varname作为参数时,(如echo varname)将被解析为一个字符串如(”varname")
3. 当我们想要得到value时,我们需要echo $varname,使用 "$"符号进行取值
这篇博客差不多就写到这拉,算是个入门的大杂烩,想要系统的学习还是需要花很多时间的
有问题欢迎google,或者留言联系。
附上一些较好的参考博客:
shell变量、赋值和运算
https://www.cnblogs.com/ladawn/p/8412553.html
处理shell脚本输入参数:
https://www.jianshu.com/p/761b19247979
shell字符串处理技巧:
https://blog.csdn.net/mountaindancer/article/details/78519998
shell echo:
https://blog.csdn.net/vip_wangsai/article/details/72592649
shell 循环:
https://www.cnblogs.com/zhangmingcheng/p/5812750.html
python参数获得:https://www.cnblogs.com/saiwa/articles/5253713.html