AI智能
改变未来

Linux-shell编程

Linux shell编程

  • 第一个shell脚本
  • 变量
  • 变量的定义及使用
  • 预定义变量和位置变量
  • 数值关系运算符、逻辑运算符和字符串运算符
  • 文件运算符
  • test结构
  • 循环if、for、while
  • TMOUT
  • 函数参数
  • shell循环打印图形

第一个shell脚本

vi test.sh 下面展示一些

代码

#!/bin/bashecho \"Hello,shell,u\'r very pretty.\"

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

变量

变量的定义及使用

#!/bin/bashabc=123123123  #不需要声明变量aab=abc  # aab 直接引用aaa=${JAVA_HOME}  #环境变量可以直接使用def=${!aab} # 间接引用。 将abc的值分配给defabc=${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=123b=123#c=${a}+${b}*2    #输出123+123*2(( c=${a}+${b}*2 ))  #输出369#c=$[${a}+${b}*2]  #输出369echo $c

预定义变量和位置变量

预定义变量$#:命令行参数或位置参数的数量$?:最近一次执行的命令或shell脚本的出口状态$*:表示所有的位置参数,其值是所有位置参数的值$$:变量是shell脚本里面的进程ID。Shell脚本经常使用 $$ 变量组织临时文件名,确保文件名的唯一性位置变量$n:$0代表命令本身,$1-$9代表顺序参数编号,大于10的话使用括号,如${10}
#!/bin/basha=$1b=$2c=$[$1+$2*2]echo c变量:$cecho 变量个数:$#echo 状态:$?echo 命令本身:$0echo 所有参数:$*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/bashaaa=123bbb=123if [  ]then echo \"nihao\"else echo \"buhao\"fib=$[ aaa == 123 ]echo $aecho $bexport bb=$b #需要source yunsuan.sh,才能通过命令窗口echo $bb 输出值

输出结果

buhao1

文件运算符

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

使用脚本删除文件

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

test结构

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

演示

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

循环if、for、while

if语句ifthen...fiif-else语句ifthen...else...fiif-else-if语句:ifthen...elifthen...else...fifor循环:for((a=1;a<5;a++))do...done增强for循环:for a in parm1 parm2 parm3 parm4 ....do...donewhile循环:(())基本等同于[]a=1while [a -le 5]do...let \"a++\"donecase 判断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]#doneecho \"请输入1-4之内的数字\"read numcase $num in1)echo \"输入的是1\";;2)echo \"输入的是2\";;3)echo \"输入的是3\";;4)echo \"输入的是4\";;*)echo \"输入的不正确\"esac

TMOUT

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

函数参数

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

脚本执行其他脚本

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

shell循环打印图形

打印矩形,自定义大小

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

打印直角三角形

#!/bin/bashthree_ancle(){for((a=1;a<=5;a++))dofor((b=1;b<=5-a;b++))doecho -n \" \"donefor((b=1;b<=a;b++))doecho -n \"*\"doneecho \"\"done}three_ancle

打印菱形

#!/bin/bashdiamond(){for((a=1;a<=5;a++))dofor((b=1;b<=5-a;b++))doecho -n \" \"donefor((b=1;b<=a;b++))doecho -n \"* \"doneecho \"\"donefor((a=1;a<=4;a++))dofor((b=1;b<=a;b++))doecho -n \" \"donefor((b=4;b>=a;b--))doecho -n \"* \"doneecho \"\"done}diamond
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Linux-shell编程