Linux-shell编程

第一个shell脚本

vi test.sh 下面展示一些 代码

#!/bin/bash
echo "Hello,shell,u'r very pretty."

chmod +x test.sh 赋予执行权限
运行几种方式:
1、./test.sh
2、sh test.sh
3、/bin/bash test.sh

变量

变量的定义及使用

#!/bin/bash
abc=123123123  #不需要声明变量
aab=abc  # aab 直接引用
aaa=${JAVA_HOME}  #环境变量可以直接使用
def=${!aab} # 间接引用。 将abc的值分配给def
abc=${abc/'1'/'h'}# 将1转换成h
#echo $aaaaa $abc  #{}可以规定范围
#echo ${aaa}aa $abc  #输出
#echo ${def} 	#输出/opt/jdk1.8.0_221aa h23123123
#echo ${aab}	#直接输出abc
#path=`pwd`  # 将命令的结果分配给变量
#echo $path		#输出pwd命令结果

计算表达式

a=123
b=123
#c=${a}+${b}*2    #输出123+123*2
(( c=${a}+${b}*2 ))  #输出369
#c=$[${a}+${b}*2]  #输出369
echo $c

预定义变量和位置变量

预定义变量
	$#:命令行参数或位置参数的数量
	$?:最近一次执行的命令或shell脚本的出口状态
	$*:表示所有的位置参数,其值是所有位置参数的值
	$$:变量是shell脚本里面的进程ID。Shell脚本经常使用 $$ 变量组织临时文件名,确保文件名的唯一性
位置变量
	$n:$0代表命令本身,$1-$9代表顺序参数编号,大于10的话使用括号,如${10}
#!/bin/bash
a=$1
b=$2
c=$[$1+$2*2]
echo c变量:$c
echo 变量个数:$#
echo 状态:$?
echo 命令本身:$0
echo 所有参数:$*
echo 进程:$$

./tmpParam.sh 3 4 输出结果

c变量:11
变量个数:2
状态:0
命令本身:./tmpParam.sh
所有参数:3 4
进程:2817

./tmpParam.sh 3 5 6 4 9 6 输出结构

c变量:13
变量个数:6
状态:0
命令本身:./tmpParam.sh
所有参数:3 5 6 4 9 6
进程:2824

数值关系运算符、逻辑运算符和字符串运算符

数值关系运算符
	-eq	等于
	-ne	不等于
	-gt	大于
	-lt	小于
	-le	小于等于
	-ge	大于等于
逻辑运算符
	-a或&&	逻辑与
	-o或||	逻辑或
	!	逻辑否
字符串运算符
	=	等于
	!=不等于
	-z	判断是否为空

bash shell脚本中变量无法存储布尔值,布尔值只能用于条件判断
条件中非空都为true
vi yunsuan.sh

#!/bin/bash
aaa=123
bbb=123
if [  ]
then echo "nihao"
else echo "buhao"
fi
b=$[ aaa == 123 ]
echo $a
echo $b
export bb=$b #需要source yunsuan.sh,才能通过命令窗口echo $bb 输出值

输出结果

buhao
1

文件运算符

-d	判断是否为目录
-e	判断目录或文件是否存在
-f	判读是否为文件
-r	判断文件或目录只对当前用户是否可读
-w	判断文件或目录针对当前用户是否可写
-x	判断文件或目录针对当前用户是否可执行

使用脚本删除文件

#要根据文件名删除文件,删除前判断类型,如果是目录则不删除
fullPath=$1
echo $fullPath
if [ ! -e $fullPath ]
then
        echo "文件不存在,不可删除"
elif [ -d $fullPath ]
then
        echo "要删除的是已经安装好的目录,不可删除"
elif [ -f $fullPath ]
then
        echo "执行删除:"`rm -f $fullPath`
else
        echo "xxx"
fi
echo "状态为:"$?
echo "执行脚本完成"

test结构

和if用法差不多,但是可读性比较差
	if   exit status     # 返回0表示true,其他的返回值为false 
	then
	if   test  comparison expression or file tests 	
	then
	if   [  comparison expression or file tests  ]	
	then
	if   [[ comparison expression or file tests  ]]	
	then

演示

#!/bin/bash
vi="beijing"
v2="rotonto"
[[ $v1 != $v2 ]] && echo "这两个不等"

循环if、for、while

if语句
	if
	then
		...
	fi
	
if-else语句
	if
	then
		...
	else
		...
	fi

if-else-if语句:
	if
	then
		...
	elif
	then
		...
	else
		...
	fi

for循环:
	for((a=1;a<5;a++))
	do
		...
	done

增强for循环:
	for a in parm1 parm2 parm3 parm4 ....
	do
		...
	done

while循环:(())基本等同于[]
	a=1
	while [a -le 5]
	do
		...
		let "a++"
	done 

case 判断
	case 变量 in:
		值1)
			...
			;;
		值2)
			...
			;;
		值3)
			...
			;;
		...
		*)
				...
			;;
	esac

例题

#!/bin/bash
#var = 6对下面表达式无影响
#for var in 1 2 3 4 5
#do
#       echo $var
#       echo "abc"
#done
#a=0

#while [ $a -lt 5 ]
#do
#       echo "循环次数"+$[ ${a}+1 ]
#       let "a++"
#done

#for ((a=0;a<5;a++))
#do
#       echo "循环次数"$[$a+1]
#done

echo "请输入1-4之内的数字"
read num
case $num in
        1)echo "输入的是1"
        ;;
        2)echo "输入的是2"
        ;;
        3)echo "输入的是3"
        ;;
        4)echo "输入的是4"
        ;;
        *)echo "输入的不正确"
esac

TMOUT

TMOUT:在用户输入空闲一段时间后自动断开
#!/bin/bash
TMOUT=3
echo "请在"${TMOUT}"秒内输入名称"
read name
if [ $? -eq 0 ]
then
        echo "输入的姓名为:"${name}
else
        echo "输入超时"
fi

函数参数

#!/bin/bash
function a(){
        echo "first blood!"
}
b(){
        return $[1+2]
}
aaa=$1
bbb=$2
c(){
        echo $aaa
        echo $[aaa+bbb]
        echo $1
        echo $[$1+$2]
#       echo $[ $#>0?"不空":"空" ]
}
c $1 $2
b_rst=$?

脚本执行其他脚本

#!/bin/bash
#用脚本执行其他脚本
/bin/bash /tmpp/yunsuan.sh

shell循环打印图形

打印矩形,自定义大小

#!/bin/bash
echo "请输入你想要的长度:"n
read n
#打印矩形
square(){
#       for((a=1;a<=n;a++))
        for var in `seq 1 $n`
        do
                for((b=1;b<=n;b++))
                do
                        echo -n "* "
                done
                echo ""
        done
}
square

打印直角三角形

#!/bin/bash
three_ancle(){
        for((a=1;a<=5;a++))
        do
                for((b=1;b<=5-a;b++))
                do
                        echo -n " "
                done
                for((b=1;b<=a;b++))
                do
                        echo -n "*"
                done
                echo ""
        done

}
three_ancle

打印菱形

#!/bin/bash
diamond(){
        for((a=1;a<=5;a++))
        do
                for((b=1;b<=5-a;b++))
                do
                        echo -n " "
                done
                for((b=1;b<=a;b++))
                do
                        echo -n "* "
                done
                echo ""
        done
        for((a=1;a<=4;a++))
        do
                for((b=1;b<=a;b++))
                do
                        echo -n " "
                done
                for((b=4;b>=a;b--))
                do
                        echo -n "* "
                done
                echo ""
        done
}
diamond
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值