实现算数运算或者实现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
特殊变量
查看位置参数的数量 $#
所有位置参数的内容 $*
命令执行后返回的状态 $?
当前的进程号: $$
后台执行的最后一个进程号:$!