(尚硅谷)
#!/bin/sh
开头
这里的全集变量和局部变量有点儿区别。。。
env查看所有全局环境变量,。
自定义变量,变量名等于变量值即可了。。
中间不能有空格。。
赋值一句话(中间有空格的)要用引号来括起来。。
自定义出来的变量env中没有。。
但是set中间有。。
export可以导出定义的变量为全局变量。。
但是:子shell更改成全局变量,父shell不变,支队他的子shell是全局变量。
相对路径的方式是打开了一个子shell,source和. 是直接在当前环境中打开。
使用相对绝对路径的方法要记得先用export导出。
不可做数值计算,除非用过shell的特殊方式。
定义只读变量::例如:readonly b = 5
unset可以撤销定义的变量。
特殊变量::
$n 后面输入的第n个值。。
basename 可以得到脚本本来的名称。。
$ #几个变量。
$ * 打印所有的输入参数变量(与后面的循环有关)
$ ? 返回值,一般正确的就是0.。
运算:
expr 1 + 2 要有空格
较为麻烦::
可用:$[]中要加转义的小于大于号 $(())中间加正常的小于大于号
里面写计算表达式即可。。
而用expr赋值要用命令替换:可用反引号或者是$加小括号
条件判断::
test命令:
使用是test $a = ahdk类似这种返回0则代表正确。。
简写:中括号:[]中间一定要有空格
小于等于大于都要转义
-lt -gt -eq
还可以判断文件的权限
-e 文件存在
-f 文件存在并且是一个常规文件
-d 文件存在并且是一个目录。
逻辑与非与其他语言用法一样。。
$* $@的区别,前者把所有的参数都看成是一个整体,后者也代表命令行中所有的参数,不过$@把每个参数区分对待。。
加双引号可以看出区别。。
流程控制::重点:
1 顺序,分支,循环结构。。
if【】 ;(then)
fi
放在一个中括号中,要用-a 来表示逻辑与。。
2 if elif else
3 case 大体跟其他语言的语法差不多 注意俩个分号结束;
循环。。
read 。。。
后缀t指定时间,几秒不输入自动输出,p带提示输入的文本。
函数::::
系统函数:所有的命令都可以看成是系统函数,函数在使用时候也要加上命令替换的符号。
basename 可以获取文件的名称,不过是相当于做一个字符串的剪切
带上参数suffix(其实就是把要去除的后缀写在后面)也可去除后缀。。
dirname截取名称之前的路径返回;
值得注意的点就是一定要把命令带上$()。。。命令替换
自定义函数::
调用之前一定先要声明,实参形参用法。
多多实操练习!!!
shell编程的正则表达式
时间编程中经常要进行截取字符串拼接字符串等等操作。
最基本的正则,管道操作加grep 加关键字就可以过滤。。
^ 可以匹配一行的开头
$ 匹配一行的结尾。用法:也要用grep放在关键字的前或者后
这俩个可以一起使用。。。中间什么都不加可以匹配到空行(grep后缀你显示行号)
. 匹配任意字符 类似r..t 可以配到root这样
* 匹配到前一个字母出现任意次的字符。
.* 匹配所有的。。
中括号或用正则可以有不可思议的强大功能。