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

课堂内容

复习问题:
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
  • 注意:unset是清除变量的值。若变量未定义直接使用,其值为空

4.再次强调

(1)shell程序必须指定脚本的解释程序
  • 在shell脚本程序的第一行必须是:#!/bin/bash
(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部分的学习

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,130评论 2 34
  • 第一章 马东是j市第九中学132班的一名同学,从小无恶不作是个孩子王,上小学时是学校的小霸王,上中学时更是无法无...
    刘更臣阅读 321评论 0 0
  • 出租屋改造
    小七奇奇阅读 295评论 0 0
  • 以前,可能根本不会喜欢 bigbang 或许是因为现在的我们跟他们一样,发型乱成一团,一样需要用全身的力气呐喊
    唯i阅读 135评论 0 0
  • 转眼间,老公离开我半年了。这半年,我真的觉得不好过,觉得心好痛。时常,眼泪都在眼睛里打转。主内的姐妹时常告诉我说:...
    以斯帖_ae1f阅读 177评论 0 0