#/bin/bash
1 、通配符
* :匹配任何字符和字符串,包括空字符串。
?:匹配任意一个字符。如:? abc 可以匹配任何以 abc 结束,以任意字符开关的四个字符的字符串。
[…] :匹配括号里列出的任何单字符。如 abd[def] 匹配以 abc 开头,以 def 中任意一个字符结尾的字符串。
2 、别名,自定义一个命令,作为其它命令的缩写,减少键盘输入。如:
alias list=’ls -l’
取消别名: unalias list
3 、给脚本添加可执行权限: chmod +x file.sh
4 、 Shell 中的变量分为局部变量、环境变量、位置变量三种。
Shell 语言是解释性语言,对一个变量进行赋值时,就定义了变量。
程序的变量无数据类型,可以使用同一个变量存放不同数据类型的值。
变量赋值后,加一个 $ 访问变量的值。
赋值符号: =
没有空格的字符串的赋值,可以不用引号。
5 、环境变量,是一个用户的所有进程中都可以访问的变量。
使用 export 命令可以查看系统的环境变量列表。
环境变量的访问,需要在一个环境变量的前面加 $ 个符号。
定义一个环境变量:
export XX=1234
echo $XX
6 、位置变量,是 Shell 程序在运行时传入的参数。程序以变量的形式来调用这些参数,被存放到 1~9 共 9 个变量名中,被形象地称为位置变量。如
#!/bin/bash
#test.sh
echo $1
echo $2
执行: ./test.sh Beijing abcd
结果如下:
Beijing
abcd
7 、算术运算符: + 、 - 、 * 、 / 、 ** 、 % 、 += 、 -= 、 *= 、 /= 、 %=
8 、用 expr 改变运算顺序。如 echo `expr 1+2` ,结果: 1+2, echo `expr 1 + 2`,结果:3
用 let 指示数学运算。 b=let 1+2 ,然后用 echo $b 输出 b 的值 3
$[] 表示数学运算。中括号中的内容将先进行数学运算。如 echo $[1+2]
9 、 echo 命令可以输出文件或变量的值,是 Shell 中最常用的输出方式。可以输出到终端,或文件。
echo $str # 输出到终端
echo $str >file # 输出到文件 file 中,如果没有文件,会新建一个。如果已经存在,将覆盖以前的文件。如果是追加输出到文件,改用 >> 。
格式控制符: /c ,输出完毕不换行; /n ,输出一个换行; /t 输出一个跳格;
echo 后加 -e 选项,输出特殊字符。加 -n 可以禁止 echo 输出后的换行。
10 、 read 命令读取信息
read 命令可以从键盘或文件读入信息,并赋给一个变量。
如果只读入一个变量,会把键盘上输入的所有信息赋值给这个变量, enter 键结束;如果读放多个变量,用空格键将输入的变量隔开。如果输入变量的个数多于需要读取变量的个数,将会把剩余的变量赋值给最后一个变量。在读取语句后添加 <filename ,表示从文件中读取数据,并且赋给变量。如 read A B <a.txt
11 、文件重定向:
cmd > filename: 把标准输出重定向到一个文件中
cmd >> filename: 把标准输出以追加的方式重定向到一个文件中
cmd 1 > filename: 把标准输出重定向到一个文件中
cmd >filename 2>&1: 把标准输出和标准错误一起重定向到一个文件中
cmd 2> filename: 把标准输出的错误得定向到一个文件中
cmd >>filename 2>&1 把标准输出和标准错误一起追加到一个文件中
cmd < filename1 > filename2: 把 cmd 命令以 filename 文件为标准输入,以 filename2 文件作为标准输出
cmd < filename :把 cmd 命令以 filename 文件作为标准输入
例:将文件 a.txt 中的所有小写字母转换成大写字母,然后保存到文件 b.txt 中
tr ”[a-z]” “[A-Z]” < a.txt > b.txt
12 、双引号表示一个字符串。字符串中不能直接使用 $ 、引号、双引号、反斜线、反引号这些特殊字符。如果字符串中没有空格,使用双引号将赋值的字符串引起来,和不使用双引号效果是一样的。当字符串中有空格时,用双引号表示引号中的内容为一个字符串。
13 、反引号,反引号 ` 并不是单引号,而是 ”Tab” 键上面的那个符号。反引号用于执行引号中的系统命令,然后将命令的结果返回。
echo `date`
A=`ls`
echo $A
14 、反斜线,用于对特殊字符进行转义。 str=///%/*/&;echo $str
15 、文件状态测试
test –x a.txt # 测试当前目录下的文件 a.txt 是否可以执行
-d 测试文件是否为目录文件
-s 是否非空
-f 是否是正规文件
-w 是否可写
-L 是否是符号连接
-x 是否可执行
-r 是否可读
-u 是否有 suid 位设置
16 、数值测试,指的是比较两个数值大小或相等关系。
test 命令:
test 第一个操作数 数值比较符 第二个操作数
用中括号代替 test 命令:
[ 第一个操作数 数值比较符 第二个操作数 ]
数值比较符:
-eq: 相等
-ne :不相等
-le :小于或等于
-ge :大于或等于
-gt :大于
-lt :小于
例:
test 3 –eq 5; 等价于 [ 3 –eq 5 ]
17 、字符串测试符:
= :两个字符串是否相等
!= :是否不相等
-z :是否是空字符串
-n :非空字符串
18 、逻辑测试符: -a 逻辑与; -o 逻辑或; ! 逻辑否。 [ -w a.txt –a –x a.txt ]; echo $?
19 、流程控制结构
if 语句:
if 条件
then cmd1
else cmd2
fi
if 条件 1
then cmd1
elif 条件 2
then cmd2
else cmd3
fi
for 语句:
for 变量名 in 列表
do
cmd1
cmd2…
done
例:
#!/bin/bash
# 9 * 9
for i in 1 2 3 4 5
do
for j in 1 2 3 4 5
do
if [ $j –le $i ]
then
echo –e “$j/c”
echo –e “*/c”
echo –e “$i/c”
echo –e “=/c”
echo –e “$[ $i*$j ] /c”
fi
done
echo “”
done
until 语句:
until 条件
do
cmd1
cmd2…
done
例:
#!/bin/bash
#1+2+…+100
sum=0
i=1
until [$i –gt 100]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo $sum
20、在后台执行命令
如果在命令行后面加上一个&符号,Shell就会在立即返回到提示符下,并在后台并行地执行该命令,而无需等待就可以启动下一下命令。后台作业在执行时的输出结果将被送到屏幕。
!变量包含提交给后台的最后一项作业的PID,可以用kill -9 $!杀死该后台进程。
jobs命令可以显示当前在后台中运行的作业。
fg %num可以将num数字指定的作业送到前台执行。如果没有指定数字,则将最近执行的后台作业送到前台执行。
#!/bin/bash str1="badasealya" str2="badasealy" if [ "$str1" /> "$str2" ] then echo "Yes" else echo "No" fi echo "end!" #!/bin/bash str1="badasealy" str2="badasealy" if [ "$str1" == "$str2" ] then echo "Yes" else echo "No" fi echo "end!"