===============
1.判断文件夹是否存在
if [ -d ./bin ];
===============2.判断文件是否存在
if [ -f ./1.txt ];
或者
if test -f aa.txt;then
echo 存在;
fi
===============
echo 1+2
Shell并没有输出结果3,而是输出了1+2。在shell中有三种方法可以更改运算顺序。
1.用expr改变运算顺序。
可以用echo `expr 1 + 2`来输出1+2的结果。
用expr表示后面的表达式为一个数学运算。
需要注意的是,`并不是一个单引号,而是“Tab”键上面的那个符号。
2.用let指示数学运算。
可以先将运算的结果赋值给变量b,运算命令是let b=1+2。
然后用echo $b来输出b的值。如果没有let,则会输出1+2。
Let expressions 执行一个或多个表达式。表达式中的变量前不必有$.
如果表达式中包含了空格或其他特殊字符,则必须引起来。
i=111
let "i =i+ 22"
或者
let i=i+33
3.用$[]表示数学运算。
将一个数学运算写到$[]符号的中括号中,中括号中的内容将先进行数学运算。
例如命令echo $[1+2],将输出结果3。
自增
i=1
echo $[i++]
echo $[++i]
===============
位置参数
由系统提供的参数称为位置参数。位置参数的值可以用$N得到,N是一个数字,如果为1,即$1。
类似C语言中的数组,Linux会把输入的命令字符串分段并给每段进行标号,标号从0开始。
第0号为程序名字,从1开始就表示传递给程序的参数。
如$0表示程序的名字,$1表示传递给程序的第一个参数,以此类推。
上述过程中的$0是一个内部变量,它是必须的,而$1则可有可无,最常用的内部变量有$0、$#、$?、$*,它们的含义如下。
$0:命令含命令所在的路径。
$#:传递给程序的总的参数数目。
$?:Shell程序在Shell中退出的情况,正常退出返回0,反之为非0值。
$*:传递给程序的所有参数组成的字符串。
===============
字符串比较
字符串操作符 含义及返回值
= 比较两个字符串是否相同,相同则为“真”
!= 比较两个字符串是否不相同,不同则为“真”
-n 比较字符串长度是否大于零,若大于零则为“真”
-z 比较字符串长度是否等于零,若等于零则为“真”
aa=abce
bb=abcd
if [ $aa = $bb ];then
echo a和b相等
else
echo a和b不等
fi
aa=
if [ -z $aa ];then
echo aa长度等于零
else
echo aa长度不等于零
fi
===============
数字比较
在Bash Shell编程中的关系运算有别于其他编程语言,用test语句表示大小的比较
运算符号 含义
-eq 相等
-ge 大于等于
-le 小于等于
-ne 不等于
-gt 大于
-lt 小于
===============
1>/dev/null 2>&1的含义
shell中可能经常能看到:>/dev/null 2>&1
/dev/null 代表空设备文件
> 代表重定向到哪里,例如:echo "abc" > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
那么本文标题的语句:
1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1,标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
===============
循环结构语句
for循环
语法:
for 变量 in 列表
do
操作
done
for i in a,b,c,e,i 2,4,6,8
do
echo $i
done
注意: 在循环列表中的空格可表示换行。
for((j=1;j<=100;j++));
for语句中的双括号不能省,最后的分号可有可无。
===============
case语句
语法:
case 表达式 in
值1|值2)
操作;;
值3|值4)
操作;;
*)
操作;;
esac
case的作用就是当字符串与某个值相同是就执行那个值后面的操作。
如果同一个操作对于多个值,则使用“|”将各个值分开。
在case的每一个操作的最后面都有两个“;;”分号是必需的。
===============
判断文件大小
a=$(ls -l $filename | awk '{ print $5 }')
if test $a -eq 0
echo 文件大小为0
fi
===============
sed实现直接修改文件内容
sed是实现对流的编辑。通常,我们使用sed可以实现内容的编辑后然后保存成另外的一个文件,如果正确的话,才写入到源文件。
但是某些时候,我们需要直接修改文件,因为,保存文件到一个文件,然后再覆盖原文件的办法显得很麻烦。
其实很简单,只需要一个 -i 参数就可以了。
比如,我想替换文件中的 properties 为 property ,可以使用
sed 's/properties/property/g' build.xml
[注] 's/{old value}/{new value}/'
这种方式,其实并没有修改build.xml文件的内容。如果想保存修改,通常的做法就需要重定向到另外的一个文件
sed 's/properties/property/g' build.xml > build.xml.tmp
这样,build.xml.tmp文件就是修改后的文件.
如果无误,那么就可以用
mv build.xml.tmp build.xml
覆盖原文件。
如果想直接修改源文件,而没有这样的过程,可以用下面的命令
sed -i 's/properties/property/g' build.xml
这样,就直接修改了build.xml文件
===============