Shell脚本点滴


===============
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文件

===============


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值