1.创建一个shell脚本
使用vim或vi编辑器可以创建一个.sh文件。
在shell脚本中书写shell脚本声明,echo就和Java中的println一样。
需要注意的是,保存后的shell脚本是无法直接运行的,我们通过ll可以看出,是没有运行权限的,所以需要给它授权。
授权后再使用ll查看一下,就可以发现现在有了执行权限了。
执行文件。这里需要特殊说明一下./ 只是运行shell脚本的一种方法,还可以使用 /bin/bash lxh.sh
2.shell中声明和使用变量
声明格式:变量名=“xxxxxxxxxx” (注意:变量名和=之间不能有空格)
使用格式:$变量名 或 ${变量名},变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
删除变量:
unset 变量名
3.shell中的字符串
单引号和双引号:单引号中的内容会被当作普通字符串(java的String)来处理,双引号中的内容会按照其原本的属性进行输出,可用 转义字符“\\” 将特殊符号(如$、\\、!等)变为一般字符。
字符串长度和截取:
3.shell数组:
声明:数组名=(x,x,x,x…)
使用:$ {数组名[index]}
获取所有元素:$ {数组名[@]}
数组元素个数:$ {#数组名[@]}
4.向shell脚本传递参数
shell脚本在执行之前,我们可以给它传递参数,在脚本中我们可以使用参数:
脚本中:
//其中$0为执行的文件名,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……echo \"Shell 传递参数实例!\";echo \"执行的文件名:$0\";echo \"第一个参数为:$1\";echo \"第二个参数为:$2\";echo \"第三个参数为:$3\";
控制台中:
$ ./test.sh 1 2 3
5.find查找指令
格式:find [path] [选项] 参数
-name
按文件名查询
-perm
按文件权限查询
-size
按文件的大小查找
-user
按用户(属主)查询
-group
按用户组查询
-type
按文件的类型查询
b – 块设备文件。
d – 目录。
c – 字符设备文件。
p – 管道文件。
l – 符号链接文件。 (这是个小写的L)
f – 普通文件。
案例:
查找系统中/home目录下的java文件
find /home -name \"*.java\"
6.sed
和vim差不多,都是处理文本的工具,但是两者也有区别。默认情况下不修改源文件,因为sed是将源文件内容逐行copy到一个临时缓冲区(模式空间),对其进行编辑,行处理结束后,将其输出到屏幕上,也可以通过数据重定向将结果导入到新的文件中去。
语法:sed [选项] “[动作]” [filename]
选项:
-e :允许对输入数据应用多条sed命令进行编辑。
-i:表示直接操作源文件
动作:
s:字符串匹配/查找
i: 插入
a:追加
d: 删除
c:替换
案例:
把demo文本文件中的h替换成H
sed \"s/h/H/g\" demo
7.if
#!/bin/basha=10b=10if [ $a -eq $b ];thenecho \"两个数相等\"fi
8.if else
#!/bin/bashstring=\"hello\"string1=\"HELLO\"if test $string = $string1thenecho \"两个字符串一样\"elseecho \"两个字符串不一样\"fi
9.if else-if else语法
a=10b=20if [ $a == $b ]thenecho \"a 等于 b\"elif [ $a -gt $b ]thenecho \"a 大于 b\"elif [ $a -lt $b ]thenecho \"a 小于 b\"elseecho \"没有符合的条件\"fi
10.test判断
test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
上面的代码中出现了-gt,-lt这一类奇怪的标识,下面就来解释:
数值类型:
代码:
num1=100num2=100if test $[num1] -eq $[num2]thenecho \'两个数相等!\'elseecho \'两个数不相等!\'fi
字符串类型:
代码:
num1=\"piaolaoshi\"num2=\"PIAOLAOSHI\"if test $num1 = $num2thenecho \'两个字符串相等!\'elseecho \'两个字符串不相等!\'fi
文件类型:
if test -e ./bashthenecho \'文件已存在!\'elseecho \'文件不存在!\'fi
11.循坏语句
for:
格式:
for var in item1 item2 ... itemNdocommand1command2...commandNdone
while:
格式:
while conditiondocommanddone
无限循环:
while :docommanddone
12.函数
定义格式:
函数名(){xxxxxx........retrun xxxxx...}
例如:
sayHi(){echo \"hello 1906\"retrun \"dddd\"}//调用sayHi
有参数:
funWithParam(){echo \"第一个参数为 $1 \"echo \"第二个参数为 $2 \"echo \"第十个参数为 $10 \"echo \"第十个参数为 ${10} \"echo \"第十一个参数为 ${11} \"echo \"参数总数有 $# 个\"echo \"作为一个字符串输出所有参数 $* \"}//调用funWithParam 1 2 3 4 5 6 7 8 9 34 73
注意:$ 10 不能获取第十个参数,获取第十个参数需要$ {10}。当n>=10时,需要使用$ {n}来获取参数。