Home Article Practice 00_shell

00_shell

2024-04-21 14:16  views:277  source:拼搏百天我要上蓝翔    

知识点1【shell的概述】
1、啥是shell
shell本质是脚本文件:完成批处理。
shell 是软件也是语言。
软件:shell命令解析器:(sh、ash、bash),将脚本文件逐行解析执行。
语言:shell脚本语言。必须复符合解析器的规则。
2、系统默认调用的两个脚本文件
/etc/profile ~/。bashrc
/etc/profile:对系统的所有用户都有效 用户登录系统的时候 执行。
~/。bashrc:对登录的用户有效 用户登录,打开终端。
3、写脚本的步骤
第一步:
1 #!/bin/bash 指明脚本解析器用bash
第二步:
写脚本
第三步:
给脚本增加 可执行权限
1 chmod +x 脚本文件
第四步:
执行脚本文件
1 。/00_shell。sh 前者首先检测#!,使用#!指定的shell,如果没有使用默认的shell
2 。 00_shell。sh 使用当前shell读取解释00_shell。sh
3 bash 00_shell。sh 直接指定使用bash解释00_shell。sh
如果执行shell格式出错:
方式一:
1 sudo apt‐get install dos2unix
2 dos2unix 脚本文件
方式二:
知识点2【shell的自定义变量】
1、定义变量
1 num=10
2、shell的变量 获取键盘输入
3、只读变量
4、脚本的变量导出为 环境变量
直接使用系统的环境变量
5、变量的注意事项
1、命名规则
变量名由字母、数值、下划线组成 不能以数值开头 不能是关键字。
2、变量使用时注意点
1 #等号两边不能直接接空格符
2 num = 100 #错误
3 num=100 #ok
4
5 #若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来
6 num=10 20 30 #错误
7 num="10 20 30" #ok
8 num='10 20 30' #ok
9
10
3、双引号、或单引号的区别
6、修改变量变量的值
案例:给PATH添加一个路径~/tool/opencv
1 export PATH=~/tool/opencv:$PATH
知识点3【shell的预设变量】
1 $#:传给shell脚本参数的数量
2 $*:传给shell脚本参数的内容
3 $1、$2、$3、。。。、$9:运行脚本时传递给其的参数,用空格隔开
4 $?:命令执行后返回的状态
5 "$?"用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执
行,任何非0值表示命令出错)。
6 $0:当前执行的进程名
7 $$:当前进程的进程号
8 "$$"变量最常见的用途是用作临时文件的名字以保证临时文件不会重复
1 #!/bin/sh
2 echo "参数的个数:$#" #sh解析器有效
3 echo "参数的内容:$*"
4
5 #$1、$2、$3、。。。、$9:运行脚本时传递给其的参数,用空格隔开
6 echo "第一个参数:$1"
7 echo "第二个参数:$2"
8
9 # $?:命令执行后返回的结果或状态: 成功为0 失败为1
10 echo "上条语句执行的结果:$?"
11
12 # $0:当前执行的进程名
13 echo "当前的进程名:$0"
14
15 # $$:当前进程的进程号
16 echo "当前的进程名:$$"
知识点4【shell脚本的特殊用法】
""(双引号):包含的变量会被解释
''(单引号):包含的变量会当做字符串解释
``(数字键1左面的反引号):反引号中的内容作为系统命令,并执行其内容,可以替换输出为
一个变量
\ 转义字符:
同c语言 \n \t \r \a等 echo命令需加-e转义
(命令序列):
由子shell来完成,不影响当前shell中的变量
{ 命令序列 }:
在当前shell中执行,会影响当前变量
1 #!/bin/bash
2 echo "today is `date`"
3
4 # 转义字符
5 echo ‐e "##\n##"
6
7 # (命令序列) 启动子shell完整命令序列 不会影响当前shell的值
8 num=10
9 (
10 num=100
11 echo "()中的num=$num" #不会影响外部变量的值
12 )
13 echo "()外的num=$num"
14
15 # {命令序列} 当前shell完整命令序列 影响当前shell的值
16 num=10
17 {
18 num=100
19 echo "{}中的num=$num" #影响外部变量的值
20 }
21 echo "{}外的num=$num"
知识点5【条件测试】
1、条件测试的概述
语法1:使用关键字 test
1 test condition
语法2:使用[] 左右有空格
1 [ condition ]
2、文件测试
文件测试:测试文件状态的条件表达式
-e 是否存在 -d 是目录 -f 是文件
-r 可读 -w 可写 -x 可执行
-L 符号连接 -c是否字符设备 -b是否块设备
-s 文件非空
1 #!/bin/sh
2 test ‐e test。txt
3 echo "$?" #1 失败不存在
4
5 [ ‐e test。txt ]
6 echo "$?" #1 失败不存在
7
8 test ‐e a
9 echo "$?" #0 存在
10
11 [ ‐d a ]
12 echo "$?" #0 是文件夹
13
14 test ‐f a
15 echo "$?" #1 不是普通文件
16
17 [ ‐r a ]
18 echo "$?" #0 具备读权限
19 [ ‐w a ]
20 echo "$?" #0 具备写权限
21 [ ‐x a ]
22 echo "$?" #0 具备执行权限
23
24 test ‐s a。txt
25 echo "$?" #1 空文件
26
27 test ‐s b。txt
28 echo "$?" #0 非空文件
3、字符串测试
test str_operator “str”
test “str1” str_operator “str2”
[ str_operator “str” ]
[ “str1” str_operator “str2”]
其中str_operator可以是:
= 两个字符串相等 != 两个字符串不相等
­z 空串 ­n 非空串
4、字符串的操作扩展
5、数值的测试
测试数值格式如下:
test num1 num_operator num2
[ num1 num_operator num2 ]
num_operator可以是:
-eq 数值相等
-ne 数值不相等
-gt 数1大于数2
-ge 数1大于等于数2
-le 数1小于等于数2
-lt 数1小于数2
6、数值的扩展
7、复合测试
&&:
command1 && command2
&&左边命令(command1)执行成功(即返回0)shell才执行&&右边的命令
(command2)
||
command1 || command2
||左边的命令(command1)未执行成功(即返回非0)shell才执行||右边的命令
(command2)
案例:test -f test。c && test -r test。c && test -w test。c
-a (and)两状况同时成立!
test -r file -a -x file
file同时具有r与x权限时,才为true。
-o (or)两状况任何一个成立!
test -r file -o -x file
file具有r或x权限时,就传回true。
! 相反状态
test ! -x file
当file不具有x时,回传true。
案例:test -f test。c -a -r test。c -a -w test。c
知识点6【if控制语句】
格式一:
if [条件1]; then
执行第一段程序
else
执行第二段程序
fi
案例1:查看当前某个文件是否存在 如果存在查看文件内容 不存在 创建改文件,赋值内容
输出内容
1 #!/bin/bash
2 read ‐p "请输入一个文件名" fileName
3 if [ ‐e $fileName ];then
4 if [ ‐f $fileName ‐a ‐s $fileName ];then
5 cat $fileName
6 else
7 echo "存在 但不是普通文件或者为空文件"
8 fi
9 else
10 # 文件不存在 创建文件
11 touch $fileName
12 echo "hello file" >> $fileName
13 cat $fileName
14 fi
格式二:
if [条件1]; then
执行第一段程序
elif [条件2];then
执行第二段程序
else
执行第三段程序
fi
知识点7【case控制语句】
case $变量名称 in
“第一个变量内容”)
程序段一
;;
“第二个变量内容”)
程序段二
;;
*)
其它程序段
exit 1
esac
知识点8【for循环语句】
形式一:
for (( 初始值; 限制值; 执行步阶 ))
do
程序段
done
初始值:变量在循环中的起始值
限制值:当变量值在这个限制范围内时,就继续进行循环
执行步阶:每作一次循环时,变量的变化量
1 #!/bin/bash
2 declare ‐i i=0
3 declare ‐i sum=0 # declare ‐i说明sum为整型
4 for (( i=0; i<=100; i++ ))
5 do
6 #sum=$sum+$i
7 sum+=$i
8 done
9
10 echo "sum=$sum"
形式二:
for var in con1 con2 con3 。。。
do
程序段
done
第一次循环时,$var的内容为con1
第二次循环时,$var的内容为con2
第三次循环时,$var的内容为con3
案例:扫描当前目录的文件
break跳出循环 continue直接进入下一次循环
知识点9【while循环语句】
while [ condition ]
do
程序段
done
当condition成立的时候进入while循环,直到condition不成立时才退出循环
until [ condition ]
do
程序段
done
这种方式与while恰恰相反,当condition成立的时候退出循环,否则继续循环
知识点10【函数】
有些脚本段间互相重复,如果能只写一次代码块而在任何地方都能引用那就提高了代码的可
重用性。
shell允许将一组命令集或语句形成一个可用块,这些块称为shell函数
定义函数的两种格式:
格式一:
函数名() {
命令 。。。
}
格式二:
function 函数名() {
命令 。。。
}
案例1:封装一个函数计算两个数据的和
案例2:函数分文件
18_shell。sh
17_shell。sh
晚上练习:
1 编写一个shell脚本实现:
2 判断用户家目录下(~)下面有没有一个叫test的文件夹
3 如果没有,提示按y创建并进入此文件夹,按n退出
4 如果有,直接进入,提示请输入一个字符串,并按此字符串创建一个文件,
5 如果此文件已存在,提示重新输入,重复三次自动退出,不存在创建完毕,退



Disclaimer: The above articles are added by users themselves and are only for typing and communication purposes. They do not represent the views of this website, and this website does not assume any legal responsibility. This statement is hereby made! If there is any infringement of your rights, please contact us promptly to delete it.

字符:    改为:
去打字就可以设置个性皮肤啦!(O ^ ~ ^ O)