1.第一个shell脚本
创建一个test.sh文件,并书写下面内容
#!/bin/bash
echo "Hello World!"
"#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。
echo命令用于向窗口输出文本。
2.运行shell脚本
1.作为可执行程序
chmod +x ./test.ch 使脚本具有执行权限
./test.ch 执行脚本
2.作为解析器参数
/bin/sh test.ch
/bin/php test.php
这种执行方式不需要写#!/bin/bash,写了也没有
3.变量
首个符号必须是字母
中间不能出现空格,可以使用下划线(_)
本能使用标点符号
不能使用bash里的关键字(可以使用help查看保留的关键字)
you_name = "hello world!"
for file in `ls /etc`
使用变量
echo $you_name
echo ${you_name}
echo "hello $you_name"
获取字符串长度 ${#you_name}
提取子字符串 ${you_name:1:4}
查找子字符串 `expr index "$you_name" is`
Shell数组
array_name = (value0 value1 value2 ...)
array_name[n] = valuen
读取数组
value = ${array_name[n] }
使用@符号可以获取数组中所有元素
echo ${array_name[@]}
获取数组的长度
length = ${#array_name[@]}
length = ${#array_name[*]}
获取单个元素的长度 length = ${#array_name[n]}
注解 #
4.执行脚本传递参数
./test.sh 1 2 3
脚本中使用传递参数 $1 $2 $3 ... $n
$# 传递脚本的个数
$*、$@ 以一个字符串显示所有传递参数
$$ 脚本运行的当前进程ID
$! 后天运行的最后一个进程ID
$- 显示Shell使用的当前选项
$? 显示最后命令的推出状态,0表示没错误,其他值都表示有错误
5.运算符
算数运算符 + - * / % = == !=
val = `expr 2 + 2 `
echo "两数的和 $val "
关系运算符 -eq -nq -gt -lt -ge -le
布尔运算符 !(非) -o(或) -a(与)
逻辑运算符 && ||
字符串运算符 = != -z(长度是否为0) -n(长度是否为0) str(是否为null)
文件测试运算符
-b file、-c file、-d file、-f file、-g file、-k file、-p file、-u file、-r file、-w file、-x file、-s file、-e file
6.echo命令
显示换行 echo -e "OK\n" -e
显示bu换行 echo -e "OK\c" -e
显示结果定向到文件 echo "It is a test" > myfile
原样输出字符串,不进行转义或去变量(用单引号) echo '$name\"'
显示命令执行结构 echo `date`
7.printf命令
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
姓名 性别 体重kg 郭靖 男 66.12 杨过 男 48.65 郭芙 女 47.99
%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。
7.test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
数值测试
参数 | 说明 |
---|---|
-eq | 等于则为真 |
-ne | 不等于则为真 |
-gt | 大于则为真 |
-ge | 大于等于则为真 |
-lt | 小于则为真 |
-le | 小于等于则为真 |
实例演示:
num1=100 num2=100 if test $[num1] -eq $[num2] then echo '两个数相等!' else echo '两个数不相等!' fi
输出结果:
两个数相等!
8.流程控制
条件控制
if condition1 then command1 elif condition2 command2 else commandN fi
循环
for var in item1 item2 ... itemN do command1 command2 ... commandN done
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
while condition do command done
until condition do command done
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
break 跳出循环
continue 终止当前循环,进行下次循环
9.函数
定义
函数名(){code [return int]}
调用函数名()
函数参数
#!/bin/bash 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.输入输出重定向
命令 | 说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
n <& m | 将输入文件 m 和 n 合并。 |
<< tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |
11.文件包含
#!/bin/bash # author:W3Cschool教程 # url:www.w3cschool.cn #使用 . 号来引用test1.sh 文件 . ./test1.sh # 或者使用以下包含文件代码 # source ./test1.sh echo "W3Cschool教程官网地址:$url"
$ chmod +x test2.sh $ ./test2.sh W3Cschool教程官网地址:http://www.w3cschool.cn