Linux-3 shell编程总结
1、一般通配符
星号(*)功能:匹配任意字符的出现。
问号(?) 功能:匹配任意一个字符。
方括号([ ])功能:匹配括号内所限定的任何一个字符。 如: f[abcd]匹配fa、fb、fc、fd;
双引号”功能:双引号括起来的字符作为普通字符对待。
$ 、 倒引号` 、反斜线 \ 这三个仍保留其特殊功能。
$表示变量替换,用预先指定的变量值代替$和变量。
`倒引号表示命令替换。
\反斜线在后面字符是$、`、”、\、换行符之一时,表示转义字符,即不对后面字符特殊处理。
单引号’功能:单引号括起来的字符都作为普通字符。单引号保留空白符 用反斜杠消除单引号的特殊含义。
注释(#)功能:shell将#看作注释符号,忽略#后的字符。
2、shell 变量
1.变量是表示计算机内存中保存的一种数据需要占的一个位置或一组位置的标识。变量名可以由数字,字符和下划线组成,但是变量名只能由字符和下划线开头,而不能是数字。
2. shell变量种类:
系统变量:主要在判断命令参数和命令执行后的返回值时用到。
环境变量:在程序运行时需要设置的变量。
用户变量:局部变量由用户定义,用户可以定义、修改或删除他们。
3.变量赋值:格式 变量名=字符串
myfile=/home/xxxy/test1.c
注意:
赋值号两边不能有空格 在赋给变量的值中含有空格、制表符或换行符,应该用双引号把这个字符串括起来。
5.删除用户变量:
person=null ; echo $person 输出:null ; 删除变量:unset person(清除变量);
3、输入\输出命令
read命令;利用read命令从键盘上读取数据,然后赋给指定的变量,可以交互式的为变量赋值。
格式 read 变量1 变量2 。。。
例:read name read a b c
说明:变量个数与给定数据个数相同,则依次对应赋值。变量个数少于数据个数,则从左至右对应赋值,最后一个变量被赋予剩余的所有数据。 变量个数多于数据个数,则从左至右对应赋值,最后多余的变量不被赋值;
3、shell的系统变量
1.shell的系统变量:
$0 当前程序的名称,实际上是一个内部参数,它必须有!
$n $1 表示第一个参数,$2 表示第二个参数,以此类推 .
$# 命令行参数的个数,即传递给程序的总的参数数目
$? 上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。
$* 以“参数1 参数2 ... ” 形式保存所有参数,即传递给程序的所有参数组成的字符串。
$@ 以"参数1" "参数2" ... 形式保存所有参数
$$ 本程序的(进程ID号)PID
$! 上一个命令的PID
2.shell位置变量:
命令行参数是用户键入命令后所跟的数据项,通常用空格分隔。shell 脚本可以从命令行读取最多10个命令行参数存入位置变量或参数。使用shift 命令可以将参数后移;
shell的位置变量:
变量 |
含义 |
$0 |
表示这个程序的文件名 |
$1 $2 ... $9 |
这个程序的第1个到第9个命令行参数值 |
$# |
这个程序的参数个数(不包含命令名) |
$* |
这个程序的所有参数:“$1 $2 … $9”,把所有的参数保存在一个串中 |
$! |
执行上一个背景指令的PID |
$? |
执行上一个指令的返回值。 |
$$ |
这个程序的进程ID号 |
1.bash中执行整数算术运算的命令是let,其语法格式为:let arg … ;当表达式中有shell的特殊字符时,必须用双引号将其括起来。例如:
a=1
b=0
let "c=a||b "
echo $c
2.算术运算:expr命令
功能:该命令提供算术运算功能,并能对数字或非数字字符串进行计算。expr命令将参数作为表达式,计算该表达式并将结果显示在标准输出设备上。
例如:(注意运算符左右都有空格!)
expr 10 + 10
expr 20 / 5
expr $a + $b
说明:
字符*(乘)在shell中有特殊含义,因此他们的前面必须有转义字符“\”
如:expr 2 \* 5
当有变量参与运算时,需要在变量名前面加“$”
如:a=11
expr $a \% 2
5、if语句
1.if
– then-fi 结构
语法格式:
if [ condition ]
then
commands
…
fi
if 语句以fi结束。
条件外面的方括号[ ]必不可少,条件前后必须加空格。
2.if - then - else结构
语法格式
if [ condition ]
then
true - commands
else
false - commands
fi
3.if - then - elif结构
if [ condition_1 ]
then
commands_1
elif [ condition_2 ]
then
commands_2
…
else
commands_n
fi
6、条件测试语句test
test命令
功能 : test是shell内部命令,它计算参数表达式的值为真还是为假。
如果表达式为真,test返回0,否则,返回非0值。
例子1:测试文件是否是一个普通文件。若是,则显示相应信息。
# test3
if test –f “$1”
then
echo "$1 is an ordinary file."
else
echo "$1 is not an ordinary file."
fi
1.有关字符串方面的测试
也可以用test命令比较字符串。test命令为字符串比较提供了一组操作符。
操作符 |
示例 |
功能 |
-z |
-z str1 |
字符串str1长度为0,测试结果为真 |
-n |
-n str1 |
字符串str1长度大于0,测试结果为真 |
= |
str1=str2 |
字符串相等 |
!= |
str1!=str2 |
字符串不相等 |
< |
str1<str2 |
str1小于str2 |
> |
str1>str2 |
str1大于str2 |
test命令的数值判断操作符
操作符 |
示例 |
功能 |
-eq |
num1 -eq num2 |
num1等于num2,测试为真。 |
-ne |
num1 -ne num2 |
num1不等于num2 |
-gt |
num1 -gt num2 |
num1大于num2 |
-ge |
num1 -ge num2 |
num1大于等于num2 |
-lt |
num1 -lt num2 |
num1小于num2 |
-le |
num1 -le num2 |
num1小于等于num2 |
case 字符串 in
模式字符串1) 命令;;
模式字符串2) 命令;;
模式字符串n) 命令;;
esac
8、循环语句
1.while循环只要循环条件为真就进入循环体。
格式:
while [ condition ]
do
commands
done
2.until循环与while循环类似,不同的是,until循环在循环条件为假时,执行循环体。
until [ condition ]
do
commands
done
3.for循环用于按指定次数执行一系列命令。
格式:
for variable in list - of - values
do
commands
done
4.break与continue语句
break可以结束整个循环,接着执行break之后的语句。
continue命令可以结束当次循环然后转入循环控制条件开始一次全新的循环。