shell基础总结

最近经常用到shell的运算符,有时候觉得有些莫名其妙,找了下面的资料,稍作整理,留作参考

1,比较运算符

运算符        描述        示例

文件比较运算符
-e filename         如果 filename 存在,则为真        [ -e /var/log/syslog ]
-d filename         如果 filename 为目录,则为真        [ -d /tmp/mydir ]
-f filename         如果 filename 为常规文件,则为真        [ -f /usr/bin/grep ]
-L filename         如果 filename 为符号链接,则为真        [ -L /usr/bin/grep ]
-r filename         如果 filename 可读,则为真        [ -r /var/log/syslog ]
-w filename         如果 filename 可写,则为真        [ -w /var/mytmp.txt ]
-x filename         如果 filename 可执行,则为真        [ -L /usr/bin/grep ]
filename1 -nt filename2         如果 filename1 比 filename2 新,则为真        [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2         如果 filename1 比 filename2 旧,则为真        [ /boot/bzImage -ot arch/i386/boot/bzImage ]

字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)

-z string         如果 string 长度为零,则为真        [ -z "$myvar" ]
-n string         如果 string 长度非零,则为真        [ -n "$myvar" ]
string1 = string2        如果 string1 与 string2 相同,则为真        [ "$myvar" = "one two three" ]
string1 != string2        如果 string1 与 string2 不同,则为真        [ "$myvar" != "one two three" ]

算术比较运算符
num1 -eq num2        等于        [ 3 -eq $mynum ]
num1 -ne num2        不等于        [ 3 -ne $mynum ]
num1 -lt num2        小于        [ 3 -lt $mynum ]
num1 -le num2        小于或等于        [ 3 -le $mynum ]
num1 -gt num2        大于        [ 3 -gt $mynum ]
num1 -ge num2        大于或等于        [ 3 -ge $mynum ]


使用例子:test.sh
#两个数字直接比较,format : if space [ space "num1" space -lt space "num2" space]//注意这几个space
if [ "22" -lt "33" ]
then
echo "22 less than 33"
else
echo "no"
fi

a=11
b=13
#让变量加一
let a=a+1
echo "a="$a

#比较变量的值,也要注意空格
if [ $a -lt $b ]
  then
    echo "a<b"
  else
    echo "a>b"
fi

#[[ ]] 代替[ ] 也是要注意空格问题
if [[ $a -lt $b ]]
then
   echo "a<b--"
else
   echo "a>b--"
fi

#上面的比较都是用-lt/-gt...,这里用的是>,但是实验发现,只有右边为一个数字时,才可以,如果右边也是变量就会报错,具体原因不明,不知道与版本有无关系。。
if [ $a > 0 ]
then
  echo "a>0"
fi

#另外一个中格式:(( )) ,好像( )不可以。。。
if(($a<=$b))
then
  echo "(a<b)"
fi

tips:shell中两个变量比较时,尽量用[ ] or [[ ]] 注意空格

2,语句

1)if 语句


CODE:

if [ "22" -lt "33" ]注意空格
then
echo "22 less than 33"
else
echo "no"
fi

2)for 语句

for循环有几种方式:
1.for name [ in word ] ; do list ; done
2.for (( expr1 ; expr2 ; expr3 )) ; do list ; done//注意有2层括号

其中list简单说就是一串由操作符(operator ;、&、&&、||)分隔开的管道(pipeline)序列,详情参看man bash
各给出一个简单例子:

1.
for filename in `ls`
do
cat $filename
done

2.
for((i=0; i<10; i++))
do
echo $i
done

3)case 语句

CODE:

#!/bin/bash
echo "enter a number"
read ans
case $ans in
1)
echo  "you numer is $ans"
;;
2)
echo "you number is 2"
;;
[3-9])
echo "you number is $ans"
esac
case语句
case语句要求shell将一个字符串S与一组字符串模式P1,P2,...,Pn比较,当S与
某个模式Pi想匹配时,就执行相应的那一部分程序/命令.shell的case语句中字符
模式里可以包含象*这样的通配符.
语法格式:
bash用法:
case string1 in
str1)
commands1;;
str2)
commands2;;
*)
commands3;;
esac

4)while 语句

语法格式:
while expression  
do
statements
done

输出<10的基数

#!/bin/bash

i=1
while [ $i -lt 10 ]
do
echo $i >> newfile
let i=i+2

done

3,其他

1)变量赋值
a=123
#读取从keyboar输入变量
read name
b=$(ls /home) 把命令的执行结果赋值给变量
2). 使用变量(前面用$)
echo $a
let a=a+1

3)
CODE:

$0 这个程序的执行名字
  $n  这个程序的第n个参数值,n=1...9
  $*  这个程序的所有参数
  $# 这个程序的参数个数
  $$ 这个程序的PID
  $! 执行上一个背景指令的PID
  $? 上一个指令的返回值

你可能感兴趣的:(shell基础总结)