上嵌嵌入式开发学习

12.9 Linux下shell脚本命令语句学习

2016-12-09  本文已影响66人  清风纳兰

课堂内容

复习问题:
printf = "hello,world!"
printf "%s\n" $string
printf "%sn" "hello, world!"
printf "%s\n" hello, world!
printf "%s\n" "${string}"
三种写法:
$string
${string}
"$string"
printf打印字符串:
若变量值中有空格,则打印时使用"$变量名"

字符串赋值时,若值中有空格,用""括起来
变量名="hello world"
$引用变量,不能够把" "一起引用,因此打印时,需用"$变量名"

1.字符串

(1)字符串的拼接
引用字符串的值,并将多个字符串的值作为新的字符串付给新的变量,即:str="$string1 $string2"
(2)字符串的长度
lenth=${#string}
(3)字符串的分割
nstr=${string:a:b}
把字符串string从第a个之后开始截取b个字符,赋给新的变量

2.只读readonly

num=34
echo $num
num=88 #错误(error)
echo $sum
只读变量的值无法修改!!!

3.清除变量的值

num=333
echo $num
unset num
echo $num

4.再次强调

(1)shell程序必须指定脚本的解释程序
(2)空格问题

5.权限问题

sudo chmod a+x filename 所有用户
sudo chmod u+x,g+x filename 使用者和所在的组
sudo chmod +x filename 所有用户
sudo chmod 777 filename 所有权限

6.从键盘获取变量值

read:在没有输入时,则一直等待输入、
read 变量1 变量2 变量3(此情况,将输入的第一个值赋给变量1,第二个值给变量2,剩余的值全部给变量3)
不建议使用:
read num1 num2 num3...
建议:
read num1
read num2
read numn

7.shell的三大语句

功能型语句、说明型语句、结构分支语句

(1)说明型语句
以#开头的语句,至行未均为说明型语句,说明型语句不解释执行(整行)即注释
说明型语句的位置可以程序中的任何位置,可以放在解释执行语句之后,从#开始的部分到行末(只能注释一行)
(2)功能型语句

系统命令,自写程序....

(3)结构型语句

多露分支语句,循环语句,循环控制语句,测试语句,条件语句,结构型语句

8.加,减,乘,除,取余(整数)

expr  let:针对整数做简单的加、减、乘、除、取余(整数)
expr:
sum=`expr $sum + $sum1`
sum1=`expr $sum \* $sum1`
let:
let sum=num+num1
let sum1=num\*num1

乘法*:\是去掉的元意,告诉我们解释器这是真的乘法!!
:取得结果集
*
$( ):取得结果集

9.条件测试语句

test 测试语句
[ 条件测试语句 ]:注意[ ]中的空格!!

文件测试:
-e file:测试file时候存在
-d file:ceshifile是否是目录
-f file:测试file是否是文件
-r file:测试file是否可读
-w file:测试file是否可写
-x file:测试file是否可执行
算数比较运算符:
-eq:是否
-ne:是否不等
-gt:是否大于
-ge:是否大于等于
-lt:是否小于
-le:是否小于等于
字符串比较:
-z string:string长度是否为零
-n string:若string非零,为真
string=string1:是否相同
string!=string1:是否不同
逻辑操作符:
&&:逻辑与
事件1 && 事件2:当事件1和事件2都为真,则为真
||:逻辑或
当事件1 || 事件2:当事件1或事件2为真,则为真
-a:and
-o:or
常见变量:
$?:命令执行后的返回状态,返回零表示执行成功
$*:所有参数列表
$@:所有参数列表
$#:传递到脚本的参数个数
$0:可执行命令本身,不是位置参数
$1~$n:分别表示第一个至第n个位置参数
echo -n:不换行输出!

10.if语句

(1)语法机构
if [ 条件 ]
   then
       命令
fi

或者

if [ 条件 ]
   then 
       命令
elif
    [ 命令 ]
then
     命令
else
     命令
fi

若表达式为真,则执行命令表1中的命令,退出if语句;否则执行命令表2中的语句if

(3)case语句的用法:

test命令测试的条件成立时,命令返回值为真,否则返回值为假

方式一:
test $name -eq $1
echo $?

方式二:
if test -f $filename
then
   ...
fi

方式三:
if [ -f $filename ]
then
   ...
fi

10.case...esac

多路分支语句case用于多重条件测试,语法结构清晰自然,语法结构为:
case 字符串变量 in #case语句只能检测字符串变量

语句结构:
模式1)(各模式中可用文件名元字符,以右括号结束)
      命令表1;;(命令表以单独的双分号行结束,退出case语句)
模式2)
      命令表2;;
...
模式n)
      命令表n;;
esac

还可以指定以下字符串集合:
|  多重选择
?  任意一个字符
* 任意多个字符
[ a-z ] a至z之间的任意字符

11.for 循环

for...do...done

当循环次数确定时,使用for循环语句来多次执行一条或一组命令,循环体由语句括号do和done来限定。

格式为:
for 变量名 in 值列表
do
    命令
done

变量名以此获取单词表中的各个单词,每取一次值,就执行一次。
循环体中的命令,循环次数由值列表中的单词数确定,命令表中的命令可以是一条,也可以是由分号或者换行符分开的多条。
若单词表是由命令行上的所有位置的参数时,可以在for语句中省略“in 单词表”部分!

方法二:
for(i=0;i<10;++i)

注意:
for循环值列表可以省略,默认从输入参数中获取

12.while

语法结构:
while 条件或命令表达式
do
   命令
done

while语句首先测试其后的命令或者表达式的值,如果为真,就执行一次。
循环体中的命令,然后在测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。
while语句的退出状态为命令表中被执行的最后一条。

13.break和continue

break n(跳出n层)
continue语句则马上转到最近一层循环语句的下一轮循环上。
continue n(跳转到最近n层循环语句的下一轮循环上)。

课后作业

作业:(待完成...)

1.使用while循环实现九九乘法表
2.for或者while实现打印等腰三角形,行数由用户输入
3.写一个脚本,判断给定目录下的文件属性
4.预习C语言课本前三四五章,下周进入C部分的学习

上一篇下一篇

猜你喜欢

热点阅读