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。 |
|
command >> file |
将输出以追加的方式重定向到 file。 |
n > file |
将文件描述符为 n 的文件重定向到 file。 |
n >> file |
将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m |
将输出文件 m 和 n 合并。 |
n <& m |
将输入文件 m 和 n 合并。 |
<
将开始标记 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