1.Shell 编程跟java、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了
#!/bin/sh(#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序)
2.shell脚本的扩展名为.sh,回显也用echo
echo 后面的字符串可加引号或不加
显示转义字符
echo "\"It is a test\""
结果将是:
"It is a test"
显示变量
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
#!/bin/sh read name echo "$name It is a test"
4.显示换行
echo -e "OK!\n" # -e 开启转义 echo "It it a test"
输出结果:
OK! It it a test
显示不换行
#!/bin/sh echo -e "OK! \c" # -e 开启转义 \c 不换行 echo "It is a test"
输出结果:
OK! It is a test
显示结果定向至文件
echo "It is a test" > myfile
原样输出字符串,不进行转义或取变量(用单引号)
echo ‘$name\"‘
输出结果:
$name\"
显示命令执行结果
echo `date`
结果将显示当前日期
Thu Jul 24 10:08:46 CST 2014
3.运行shell脚本的方法
chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本
./告诉系统说就在当前目录找
还可以直接运行解释器,其参数就是shell脚本的文件名
/bin/sh test.sh
4.变量
定义变量的方法和批处理命令差不多(批处理有set,没有双引号)
your_name="runoob.com"
5.for 语句
for file in `ls /etc`
以上语句将 /etc 下目录的文件名循环出来。
6.使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可,变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。如:
your_name="qinjx" echo $your_name echo ${your_name}
备注:批处理中引用变量是%变量%
7.字符串
字符串可以用单引号,也可以用双引号,也可以不用引号
单引号
str=‘this is a string‘
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号
your_name=‘qinjx‘ str="Hello, I know your are \"$your_name\"! \n"
双引号的优点:
双引号里可以有变量
双引号里可以出现转义字符
拼接字符串
your_name="qinjx" greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1
获取字符串长度
string="hello" echo ${#string}
提取子字符串
string="hello" echo ${string:1:2}
打印st
8.Shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
定义数组
在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)
例如:
array_name=(value0 value1 value2 value3)
还可以单独定义数组的各个分量:
array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen
读取数组
读取数组元素值的一般格式是:
${数组名[下标]}
例如:
valuen=${array_name[n]}
使用@符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:
# 取得数组元素的个数 length=${#array_name[@]} # 或者 length=${#array_name[*]} # 取得数组单个元素的长度 lengthn=${#array_name[n]}
9.Shell 注释
以"#"开头的行就是注释,会被解释器忽略。
sh里没有多行注释,只能每一行加一个#号
10.Shell test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
参数说明-eq等于则为真-ne不等于则为真-gt大于则为真-ge大于等于则为真-lt小于则为真-le小于等于则为真
数值测试
参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于则为真 -lt 小于则为真 -le 小于等于则为真
实例演示:
num1=100 num2=100 if test $[num1] -eq $[num2] then echo ‘The two numbers are equal!‘ else echo ‘The two numbers are not equal!‘ fi
输出结果:
The two numbers are equal!
字符串测试
参数 说明 = 等于则为真 != 不相等则为真 -z 字符串 字符串长度伪则为真 -n 字符串 字符串长度不伪则为真
实例演示:
num1=100 num2=100 if test num1=num2 then echo ‘The two strings are equal!‘ else echo ‘The two strings are not equal!‘ fi
输出结果:
The two strings are equal!