shell是一门可以直接运行在Linux操作系统上的语言
shell中的变量只有字符串类型
shell语言可以保存在文件中
一、执行shell文件
- 编辑一个名叫test的shell文件
#! /bin/bash #shell文件的固定首行a=hellob=worldecho $a $b #echo打印变量的值:echo $变量名
- 执行文件时,该文件必须为可执行文件
chmod 777 test #给test文件赋最高权限:chmod 777 文件名
- 执行文件
./test #执行可执行文件:./文件名
- 运行结果
hello world
- 例子
-创建一个名为User1的用户,然后删除该用户,也要删除该用户的家目录
#! /bin/bash #shell文件的固定首行u=User1useradd $uecho \"Successfully created user $u!\" #输出字符串
#! /bin/bash #shell文件的固定首行u=User1userdel $urm -rf /home/User1echo \"Successfully deleted user $u!\" #输出字符串
二、读取键盘输入的字符串并存入到变量中
- 直接读取
#读取一个变量read i #read 变量名#读取两个变量read i n
- 提示读取
#读取一个变量read -p \"Please enter an integer:\" i #-p参数可以用来输出一个提示字符串:read -p “提示字符串“ 变量名#读取两个变量read -p \"Please enter two integers:\" i1 i2
三、计算
#格式:$[$变量1运算符$变量2]$[$a+$b]$[$a-$b]$[$a*$b]$[$a/$b]$[$a%$b]#!/bin/bashread \"Please input the first number:\" num1read \"Please input the second number:\" num2echo \"The first number is $num1\"echo \"The second number is $num2\"echo $[$num1+$num2]echo $[$num1-$num2]echo $[$num1*$num2]echo $[$num1/$num2]echo $[$num1%$num2]
四、比较
- 数值的比较
#等于:[ $变量1 -eq $变量2 ] 或 ((变量1==变量2))#不等于:[ $变量1 -ne $变量2 ] 或 ((变量1!=变量2))#大于:[ $变量1 -gt $变量2 ] 或 ((变量1>变量2))#大于等于:[ $变量1 -ge $变量2 ] 或 ((变量1>=变量2))#小于:[ $变量1 -lt $变量2 ] 或 ((变量1<变量2))#小于等于:[ $变量1 -le $变量2 ] 或 ((变量1<=变量2))#! /bin/basha=10b=20if [ $a -eq $b ] #或if((a==b))thenecho \"a is equal to b!\"elif [ $a -gt $b ] #或if((a>b))thenecho \"a is bigger than b!\"elseecho \"a is less than b!\"fi
- 字符串比较
#if [ \"$变量1\"==\"$变量2\" ]#!/bin/bashread -p \"It is morning? Please input yes or no:\" yonif [ \"$yon\" = \"yes\" ]thenecho \"Good morning!\"elif [ \"$yon\" = \"no\" ]thenecho \"Good afternoon!\"elseecho \"Sorry, $yon is not right!\"fi
五、逻辑运算符
# &&用来连接两个比较运算,表示并且的关系# ||用来连接两个比较运算,表示或者的关系#分数分级#!/bin/ bashread -p \"Please input your score:\" sif((s>=0&&s<60)) #0-59:Ethenecho\"E\"elif ((s>=60&&s<70)) #60-69:Dthenecho \"D\"elif((s>=70&&s<80)) #70-79:Cthenecho \"C\"elif((>=80&&s<90)) #80-89:Bthenecho \"B\"elif((s>=90&&s<=100)) #90-100:Athenecho \"A\"elseecho \"Error score\" #其他分数;错误fi
#判断三角形#!/bin/bashread -p \"Please input three sides:\" a b cif((a+b>c&&b+c>a&&a+c>b)) #是三角形thenif((a==b&&a==c)) #是等边三角形thenecho \"equilateral triangle\"elif((a==b||b==c||a==c)) #是等腰三角形thenecho \"isosceles triangle\"elif((a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)) #是直角三角形,a*a不能用a^2表示thenecho \"right triangle\"elseecho \"general triangle\" #是一般三角形fielseecho \"error\" #不是三角形fi
六、循环
-
循环四要素:
①初始化表达式
②布尔值测试表达式
③循环体
④更改表达式 -
while循环格式
①
while((②))
do
③
④
done
#打印1-100#!/bin/bashi=1while((i<=100))doecho $ii=$[$i+1] #或((i++)) 或 let i+=1done
#1-100相加#!/bin/bashi=1sum=0while((i<=100))dosum=$[$sum+$i] #或 ((sum=sum+i)) 或 let sum=sum+ii=$[$i+1] #或((i++)) 或 let i+=1doneecho $sum
- for循环格式
for((①;②;④))
do
③
done
#100以内奇数之和#!/bin/bashsum=0for((i=1;i<100;i+=2))do((sum+=i))doneecho $sum
- break
#判断一个键入的数是不是素数#!/bin/bashread -p \"Please input an integer:\" ifor((j=2;j<i;j++))doif ((i%j==0)) #有因数就输出“不是素数”,并breakthenecho \"$i is not a prime mumber!\"breakfidoneif((i==j)) #如果没有因数,就会一直遍历到j=ithenecho \"$i is a prime number!\"fi
七、ASCⅡ
#打印一个*echo -e \"\\x2a\" #-e是允许使用转义字符,2a是*的ASCⅡ值
#打印一行*#!/bin/bashline=\"\\x2a\"for((i=1;i<100;i++))doline=$line\"\\x2a\"doneecho -e $line
#打印5行10列*#!/bin/bashfor((j=0;j<5;j++)) #或((j=1;j<=5;j++))doline=\" \"for((i=0;i<10;i++)) #或((i=1;i<=10;i++))doline=$line\"\\x2a\"doneecho -e $linedone
八、例子
- 编写程序,找出100到999之间所有的\”水仙花\”数。所谓水仙花数,指的是一个三位数,各位数字的立方和等于该数本身,比如:153=111+555+333,所以153就是水仙花数。水仙花数共有四个:153,370,371,407。
#找出100到999之间所有的\"水仙花\"数#!/bin/bashfor((i=100;i<1000;i++))do((j=i/100))((k=i%100/10))((l=i%10))if((j*j*j+k*k*k+l*l*l==i))thenecho $ifidone
- 一口深77米的井下有一只青蛙,这只青蛙白天往上爬7米,夜里下落5米,问第几天爬出井口?
#青蛙爬井#!/bin/bashh=0for((i=1;;i++))do((h+=7))if((h>=77))thenecho $ibreakfi((h-=5))done
- 打印图形
***************#!/bin/bashfor((i=0;i<5;i++))doline=\" \"for((j=0;j<i;j++))doline=$line\"\\x2a\"doneecho -e $linedone
***************#!/bin/bashfor((i=0;i<5;i++))doline=\" \"for((j=0;j<5-i;j++))doline=$line\"\\x2a\"doneecho -e $linedone
** ** * ** * * ** * * * ** * * ** * ** **#!/bin/bashfor((i=0;i<10;i++))doif((i<5))thenn=4-im=i+1elsen=i-4m=9-ififor((j=0;j<n;j++))doecho -n \" \"donefor((j=0;j<m;j++))doecho -n \"* \"doneecho \"\"done#或—————————————————————————————————————————————————————————————————#!/bin/bashfor((i=0;i<5;i++))doline=\" \"for((j=0;j<4-i;j++))doline=$line\"\\x20\"donefor((k=0;k<i+1;k++))doline=$line\"\\x2a\\x20\"doneecho -e $linedonefor((i=0;i<4;i++))doline=\" “for((j=0;j<i+1;j++))doline=$line\"\\x20\"donefor((k=0;k<4-i;k++))doline=$line\"\\x2a\\x20\"doneecho -e $linedone