1.以vi等工具编写脚本文件,以~.sh的格式保存,使用chmod +x ./~.sh赋予权限,./~.sh跑脚本
2.bash shell 中每个变量的值都以字符串的形式保存,如不含空格,可以直接赋值,要是有就要使用引号。单引号时,将引号里面的值直接输出,不解析。双引号时,会解析引号里面的值,可能是参数,引用的值什么的。
3.引用变量时,可以加花括号来标记边界,如 skill="Java" echo "I am good at ${skill}Script"
4.将命令的结果赋值给变量,可以使用反引号或$(),然后使用echo输出
[mozhiyan@localhost ~]$ cd code
[mozhiyan@localhost code]$ log=$(cat log.txt)
[mozhiyan@localhost code]$ echo $log
[2017-09-10 06:53:22] 严长生正在编写Shell教程
[mozhiyan@localhost code]$ log=`cat log.txt`
[mozhiyan@localhost code]$ echo $log
[2017-09-10 06:53:22] 严长生正在编写Shell教程
[mozhiyan@localhost code]$
5.设置只读变量,readonly bianliang
6.删除变量,unset 变量
7.变量类型:三种:局部变量,环境变量,shell变量
8.特殊变量:Shell $0,$#,$*,$@,$?,$$
9.shell命令替换:指Shell可以先执行命令,将输出结果暂时保存,在适当的地方输出。
语法:使用反引号`command`
10.算数运算符:expr是一个工具,表达式与运算符之间要有空格,完整的表达式要被``包含,注意乘号的使用
11.关系运算符 :仅对数字进行操作
12.布尔运算符
13.字符串运算
14.文件测试运算符,好像只能用在脚本里
15.注释:#,每行都要,如果太多行,可以考虑加花括号,包装为一个函数。
16.字符串区分单引号和双引号
17.拼接字符串
18.数组,name[0:n-1]空格隔开
19.echo命令
20.printf命令
21.if then fi if then else fi if then elif then else fi
22.test命令
23.for循环
显示主目录下文件不成功
24.while循环
输出1 2 3 4 5
25.until语句
26. 跳出循环,在if或者for语句内,可以使用break跳出循环,break n 表示跳出第几层循环
continue与break使用差不多,但是仅跳出当前循环
27. shell 函数,函数名前面的function可以不写
function function_name () {
list of commands
[ return value ]
}
函数返回值,可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值。
Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”。
如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数的计算结果,脚本在需要的时候访问这个变量来获得函数返回值。
调用函数:只需要给出函数名,不需要括号
删除函数:$unset .f funcyion_name
28.带参数的函数
结果:1 2 10 34 73 12 1 2 3 4 5 6 7 8 9 34 73
28.shell输入输出重定向
深入讲解重定向:
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。
29.文件包含:
test1.sh test2.sh
在test2.sh中写 . ./test1.sh,或者source ./test1.sh 然后就可以在test2 中引用test1中的函数,参数