Home » 未分类 » Linux 学习笔记 七

Linux 学习笔记 七

实现算数运算或者实现SHELL 命令

 

VAR=date 注意 为esc下面的反引号

echo $VAR  则输出的是date命令的输出

 

let var=1+1

echo $var 则输出结果为2

var=((1+1))

echo $var    则输出结果也是为2

 

引用

”  单引号   只要出现单引号里面,则特殊含义全部去除

\      如果下一个字符有特殊含义,则使用\ 即屏蔽其特殊含义

 

echo -e “hello \t word”             其中-e选项可以使转义字符生效

echo ‘it’s Friday’         错误 因为它会把其判断成两个

echo ‘it\’ 也是不行的,因为‘’会吧所有的转义的字符全部去除其特殊含义  会输出it\

echo it\’s Friday   正确输出

 

cal 7 2013 打印制定年份月份  默认打印当月  输入一个数字就是默认打印一年  cal 2013

双引号

删除除以下字符外所有其他字符的特殊含义

$ 用于变量替换

用于命令替换

\$

\”

\\

 

流程控制

test 测试

文件测试

字符串测试  =        != -z    -n

数字测试

测试时使用逻辑操作符

混合条件

 

九大文件类型

-e    文件存在则为真

-r     可读文件

-w   可写文件

-x    可执行文件

-s    非空文件

-d    目录文件

-f    普通文件

-c    字符文件

-b    块文件

-z    字符串为空为真

-n    字符串为非空为真

 

 

eg:

#!/bin/bash

echo -n “please input a filepath:”

read filepath

if test -d $filepath #[ expression  ]

then

echo “$filepath is a dir!”

elif [ -f $filepath ]

then

echo “$filepath is a file!”

else

echo “others!”

fi

 

#!/bin/bash

echo “please input a dir”

read filepath

if [ $filepath = $HOME ]

then

echo “this is home dir”

else

echo “this is the dir :$HOME”

fi

 

数值测试

-eq: 等于

-ne: 非等于

-lt:   小于

-gt:  大于

-le:  小于等于

-ge: 大于等于

 

eg:

#!/bin/bash

echo -n “please input two numbers:”

read num1 num2

if [ $num1 -eq $num2 ]

then

echo “$num1 = $num2 ”

elif [ $num1 -lt $num2 ]

then

echo ” $num1 < $num2″

else

echo “$num1 > $num2”

fi

 

逻辑测试

-a 逻辑与

-o 逻辑或

! 逻辑否

优先级 !> a >o

 

eg:

#!/bin/bash

echo -n “please input a file:”

read filepath

if [ -x $filepath -a -r $filepath -a -w $filepath ]

then

echo “read write and exec”

else

echo “no”

fi

混合条件

&&      与

||      或

 

case 语句

#!/bin/bash

echo -n “your a numbers:”

read number

case $number in

“BMW”)

echo “you enter one”

;;

“AUDI”)

echo “you enter AUDI”

;;

“BENZ”)

echo “it’s BENZ”

;;

*)

echo “others”

esac

         #!/bin/bash

echo -n “please input a string:”

read str

case $str in

[a-zA-Z]*)

echo “your string in a-z”

;;

#     [A-Z])

#            echo “your string in A-Z”

#            ;;

*)

echo “others”

;;

esac

 

循环

for循环

while循环

until循环

select循环

break     and continue 循环

 

for循环

一般格式

for 变量名 in 列表 for I in 0 1 2 3 4 5

do                 do

命令                    ecjo $i

done                    done

 

 

eg:

#!/bin/bash

counter=1

for num in 0 1 2 3 4 5 6 7 8 9

do

echo “num $counter:$num”

counter=$(($counter+1))

done

echo “for finished”

 

eg:

#!/bin/bash

sum=0

for((i=1;i<=100;i++))

do

sum=$(($sum+$i))

done

echo “sum is $sum”

eg:  读入一个目录,查找该目录下所有的软链接文件,并排序输出到forSoftLink文件

#!/bin/bash

echo -n “please input a dir:”

read dir

counter=1

for i in find $dir -type l  #查找目录下所有链接文件 find -type l

do

echo “file$counter:$i”

counter=$(($counter+1))

done | sort > forSoftLink

while 循环

一般 格式

while 条件         x=0

do                 while[ $x -lt 10 ]

命令                    do

done                           echo $x

x=$(($x+1))

done

 

打印是个200到500的随机数

eg:

#!/bin/bash

i=0

while [ $i -lt 10 ]

do

echo “numbers is :$(($RANDOM%(301)+200))”

i=$(($i+1))

done

until循环 条件不满足进入循环

EG:#!/bin/bash

i=0

until [ $i -gt 10 ]

do

num=$(($RANDOM%301+200))

i=$(($i+1))

echo “$num”

done

 

 

select 循环

#!/bin/bash

PS3=”which is your favorite:”

select car in “BMW” “JEEP” “HONGQI” “BENZ”

do

echo “your favorite car is $car!”

break

done

 

参数

读出并解释各种选项、参数

./filename 1 2 3 4 5

后面跟的就是参数

命令行参数:是一种在调用SHELL的命令行中按照各自的位置决定的变量,实在程序名之后输入的参数 位置参数之间以空格分隔,$1 取地一个参数 $2 取第二个参数  $0 是当前SHELL 程序名

EG:

#!/bin/bash

if [ $1 -eq $2 ]

then

echo “$1 = $2”

elif [ $1 -lt $2 ]

then

echo “$1 < $2”

else

echo “$1 > $2”

fi

 

特殊变量

查看位置参数的数量      $#

所有位置参数的内容      $*

命令执行后返回的状态 $?

当前的进程号:       $$

后台执行的最后一个进程号:$!

 

This entry was posted in 未分类. Bookmark the permalink.