linux的变量、判断、重复操作

一。export用于修改或打印环境变量,readonly则使得变量不得修改。

export用法是将变量放进环境中,环境是一个名称与值的简单列表,可供所有执行中的程序使用。export命令可以将新变量添加到环境中:

PATH=$PATH:/usr/local/bin            更新PATH

export  PATH                                      导出它

$export -p      显示当前环境

export命令仅将变量加到环境中,如果想要从程序中删除变量,则要用env命令,env也可以当作临时改变环境变量值:

env - i  PATH=$PATH HOME LC_ALL=C 。。。i是用来初始化环境变量的


二。unset命令从执行中的shell中删除变量与函数。默认情况下,它会解除变量设置,也可以加上-v来完成。

unset full                        删除full变量

unset -v first second third                        删除其他变量

使用unset -f 删除函数。


三。在linux下声明一个变量的方法:变量名=变量值。注意=左右不能有空格,使用$变量名调用变量。

查看变量:使用set命令可以查看所有你变量,包括普通变量和环境变量。

删除变量:unset变量名即可。

双引号内可以引用变量,单引号内的内容会原样输出。例:“$bb”,‘$bb’。

将命令的执行结果赋值给变量有两种方法,方法一:使用··(键盘tab上面的符号)包住执行的命令,方法二:将命令放入$()内执行。

变量的拼接:拼接变量时注意$变量名要放在“”内才有效。


四。linux的判断。

下面是一些使用实例:

#!/bin/sh
myPath="/var/log/httpd/"
myFile="/var /log/httpd/access.log"

#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$myPath"]; then
mkdir "$myPath"
fi

#这里的-d 参数判断$myPath是否存在
if [ ! -d "$myPath"]; then
mkdir "$myPath"
fi

#这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ]; then
touch "$myFile"
fi

#其他参数还有-n,-n是判断一个变量是否是否有值
if [ ! -n "$myVar" ]; then
echo "$myVar is empty"
exit 0
fi

#两个变量判断是否相等
if [ "$var1" == "$var2" ]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi

 


       if list then
           do something here
       elif list then
           do another thing here
       else
         do something else here
       fi  

EX1:

#!/bin/sh

SYSTEM=`uname -s`     #获取操作系统类型,我本地是linux

if [ $SYSTEM = "Linux" ] ; then     #如果是linux的话打印linux字符串
echo "Linux"
elif [ $SYSTEM = "FreeBSD" ] ; then   
echo "FreeBSD"
elif [ $SYSTEM = "Solaris" ] ; then
echo "Solaris"
else
echo "What?"
fi     #ifend

基本上和其他脚本语言一样。没有太大区别。不过值得注意的是。[]里面的条件判断。

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

#. $HOME/.bash_profile
cd $HOME
sh .bash_profile
cd $HOME/jnjzapp/sos_dx/
echo -e '开始'
./jn_card_dx.sh
wait
#sqlplus $DBSTR <<START_A
#@jn_card_dx.sql
#/
#commit;
#exit;
#START_A
cd $HOME/jnjzapp/sos_dx/data/
if [ ! -d  BQMSG ]; then 
mkdir BQMSG 
fi 
#mkdir BQMSG
cd $HOME/jnjzapp/sos_dx/
sqlplus $DBSTR <<START
@sos.sql;
commit;
exit;
START
objdir=`date -d ' days' +%Y%m%d`
echo $objdir
#cp jn_card_sos.txt $objdir.txt


例:if与case的对比


if ["X$1"="X-f"]

then

   ...         针对-f选项的程序代码

elif ["X$1" = "X-d"] || ["X$1"="X--directory"]             #允许长选项

then

   ...         针对-d选项程序代码

else

   echo $1:unknow option >&2

   exit 1

fi


case $1 in

-f)

   ...            针对-f选项的程序代码

   ;;

-d | --directory)     #允许长选项

   ...                       针对-d选项的程序代码

   ;;

*)

   echo $1 : unknow option >&2

   exit 1

esac

 

五。循环语句

一. for循环

        与其他编程语言类似,Shell支持for循环。

1
2
3
4
5
6
7
8
for 循环一般格式为:
for  变量  in  列表
do
     command1
     command2
     ...
     commandN
done

   列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量

   例如,顺序输出当前列表中的数字

1
2
3
4
5
6
7
8
9
10
11
12
13
for01.sh
$ cat for01.sh
#!/bin/sh
for  in  1  2  3  4  5
do
  echo  "this is $i"
done
$ . / for01.sh
this  is  1
this  is  2
this  is  3
this  is  4
this  is  5

 当然也可以向其他语言那样for ((i=1;i++<5));但是是要双括号;这个是与众不同。

1
2
3
4
5
#!/bin/sh
for  ((i = 1 ;i< = 5 ;i + + ))
do
  echo  "this is $i"
done

 【注意】in 列表是可选的,如果不用它,for 循环使用命令行的位置参数。如下:

1
2
3
4
5
6
7
8
9
10
11
12
$ cat for01.sh
#!/bin/sh
for  i
do
  echo  "this is $i"
done
$ . / for01.sh  1  2  3  4  5 
this  is  1
this  is  2
this  is  3
this  is  4
this  is  5

 【note】对于列表;像上面一样;其实命令ls当前目录下的所有文件就是一个列表


 

   二.while 循环

while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件

1
2
3
4
5
#其格式为:
while  command
do
    Statement(s) to be executed  if  command  is  true
done

 命令执行完毕,控制返回循环顶部,从头开始直至测试条件为假。
以for循环的例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ cat while01.sh
#!/bin/sh
i = 0
while  [ $i  - lt  5  ]
do
  let  "i++"
  echo  "this is $i"
done
$ . / while01.sh
this  is  1
this  is  2
this  is  3
this  is  4
this  is  5

 其实while循环用的最多是用来读文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
count = 1   
cat test |  while  read line         #cat 命令的输出作为read命令的输入,read读到的值放在line中
do
    echo  "Line $count:$line"
    count = $[ $count  +  1  ]         
done
或者如下
#!/bin/sh
count = 1
while  read line
do 
   echo  "Line $count:$line"
    count = $[ $count  +  1 
done < test

 【注意】当然你用awk的话;那是相当简单;awk '{print "Line " NR " : " $0}' test
输出时要去除冒号域分隔符,可使用变量IFS。在改变它之前保存IFS的当前设置。然后在脚本执行完后恢复此设置。使用IFS可以将域分隔符改为冒号而不是空格或tab键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
例如文件worker.txt
Louise Conrad:Accounts:ACC8987
Peter Jamas:Payroll:PR489
Fred Terms:Customer:CUS012
James Lenod:Accounts:ACC887
Frank Pavely:Payroll:PR489
while02.sh如下:
#!/bin/sh
#author: li0924
#SAVEIFS=$IFS
IFS = :
while  read name dept  id
  do
   echo  - "$name\t$dept\t$id"
  done < worker.txt
#IFS=$SAVEIFS

 

   三.until循环

until 循环执行一系列命令直至条件为 true 时停止。until 循环与 while 循环在处理方式上刚好相反

1
2
3
4
5
until 循环格式为:
until command
do
    Statement(s) to be executed until command  is  true
done

 command 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环

1
2
3
4
5
6
7
8
$ cat until01.sh
#!/bin/sh
i = 0
until [ $i  - gt  5  ]
do
  let  "i++"
  echo  "this is $i"
done

 一般while循环优于until循环,但在某些时候,也只是极少数情况下,until 循环更加有用。详细介绍until就不必要了


 

   四. break和continue命令

1. break命令
break命令允许跳出所有循环(终止执行后面的所有循环)
2.continue命令
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

1
2
3
4
5
6
7
8
9
10
break01.sh
#!/bin/sh
for  ((i = 1 ;i< = 5 ;i + + ))
do
  if  [ $i  = =  2  ];then
  break
  else
  echo  "this is $i"
  fi
done

 至于continue命令演示;你就把break替换下;执行看下效果就行了。不解释。
































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值