ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

学习笔记

2021-09-23 16:36:09  阅读:124  来源: 互联网

标签:脚本 变量 笔记 echo 学习 sh 参数 bash


sh编程


第十章知识点摘要:

阐述了sh脚本和不同版本的sh;比较了sh脚本与C程序的同时指出了解释语言和编译语言的区别;详细说明了如何编写sh脚本;解释了sh控制语句;说明了如何编写sh函数以及使用参数调用sh函数;说明了sh脚本的广泛应用。


一、sh脚本

  1. Shell 脚本的执行方式

(1)脚本以#!/bin/bash开头
(2)脚本需要有可执行权限

2.脚本执行方式

  • (1)方式1(输入脚本的绝对路径或相对路径)
    • 首先赋予脚本的 +x 权限
    • 执行脚本
  • (2)(sh + 脚本)
    • 说明:不用赋予脚本的 +x 权限,直接执行即可

二、Shell 变量介绍

  • Linux Shell 中的变量分为:系统变量用户自定义变量
  • 系统变量:$HOME、$PWD、$SHELL、$USER 等等
#!/bin/bash
echo "PATH=$PATH"
  • 显示当前 shell 所有变量:set

三、shell 基本语法

  • 定义变量:变量=值
  • 撤销变量:unset 变量
  • 声明静态变量:readonly变量,注意不能 unset
    1. shell 变量定义的规则
    变量名可以由字母、数字和下划线组成,但是不能以数字开头
    等号两侧不能有空格
    变量名称一般习惯为大写

2. 将命令的返回值赋给变量
A='ls -la' 反引号,运行该命令,并把结果返回给变量A
A=$(ls -la) 等价于反引号

#!/bin/bash
A=100            #定义变量
echo "A=$A"
unset A          #撤销变量
echo "A=$A"

readonly A=99    #定义和使用静态变量
echo "A=$A"
unset A      #静态变量不能unset
echo "A=$A"

RESULT=`ls -l/home`      #使用反引号
echo $RESULT
echo " "
MY_DATE=$(date)     #使用$()来执行
echo "date=$MY_DATE"

四、设置环境变量

  1. 基本语法
    export 变量名=变量值 (功能:将 shell 变量输出为环境变量)
    source 配置文件(功能:让修改后的配置信息立即生效)
    echo $变量名(功能:查询环境变量的值)
#!/bin/bash
TOMCAT——HOME=/opt/tomcat      #定义一个自己的环境变量
export TOMCAT——HOME      #输出环境变量

注:可以让上述的环境变量在其他bash 文件中使用

#!/bin/bash
#在另一个shell文件中使用环境变量
#使用我们自定的环境变量
echo "tomcathome=$TOMCAT——HOME"

脚本下的多行注释

:<<!
!

五、位置参数变量

当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如: /myshell.sh 100 200,这就是一个执行 shell 的命令行,可以在myshell 脚本中获取到参数信息
1. 基本语法

  • $n:n 为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号如:${10}
  • $*:代表命令行中所有参数,$*把所有参数看成一个整体
  • $@:代表命令行中所有参数,不过$@把每个参数区分对待
  • $#:代表命令行中所有参数的个数
#!/bin/bash
#获取到各个参数
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"

六、预定义变量

shell 设计者已经定义好的变量,可以直接在shell脚本中使用

1. 基本语法

  • $$:当前进程的进程号(PID)
  • $!:后台运行的最后一个进程号
  • $?:最后一次执行的命令的返回状态。若谷这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是那个数,由命令自己来决定),则证明上一个命令执行不正确了
#该bash文件名为prevar.sh
#!/bin/bash
echo "当前的进程号=$$"      
./myshell.sh &      #后台方式运行 myshell.sh
echo "最后进程的号=$!"

七、运算符

1. 基本语法

  • "$((运算式))" 或 "$[运算式]"
  • expr m + n
    • 注意expr运算符间要有空格
  • expr m - n
  • expr *,/,% ————> 乘,除,取余
    小案例:计算(2+3)× 4,请求出命令行的两个参数(整数)的和
#!/bin/bash
RESULT1=$(((2+3)*4))      #$((运算式))
echo "result1=$RESULT1"

RESULT2=$[(2+3)*4]      #$[运算式] 比较简单
echo "result2=$RESULT2"

TEMP=`expr 2 + 3`      #使用expr
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"

#两个参数(整数)的和
SUM=$[$1+$2]
echo "SUM=$SUM4"

八、sh命令

  • file :读取并执行文件。
  • break [n]:从最近的第 n 个嵌套循环中退出。
  • cd [dirname]:更换目录。
  • continue [n]:重启最近的第 n 个嵌套循环。
  • eval [arg...]:计算一次参数并让sh执行生成的命令。
  • exec [arg...]:通过这个 sh 执行命令, sh 将会退出。
  • exit[n]:使 sh 退出,退出状态为 n 。
  • export [var...]:将变量导出到随后执行的命令。
  • read [var...]:从 stdin 中读取一行并为变量赋值。
  • set [arg...]:在执行环境中设置变量。
  • shift :将位置参数$2 $3...重命名为$1 $2...
  • trap [arg[n]:接收到信号 n 后执行参数。
  • umask [ ddd ]:将掩码设置为八进制数 ddd 的。
  • wait [pid];等待进程 pid ,如果没有给出 pid ,则等待所有活动子进程。
  • read 命令:当 sh 执行 read 命令时,它会等待来自 stdin 的输入行。它将输人行划分为几个标记,分配给列出的变量。

九、I/O重定向

当进入sh命令时,我们可以指示sh将I/O重定向到除默认文件意外的文件。

>file stdout转向文件,如果文件不存在,将会创建文件。
>>file stdout追加到文件。
<file 将文件用作stdin;文件必须存在并具有r权限。
<<word 从“here”文件中获取输入,直到只包含“word”的行。


十、最有收获的知识点:

  • sh脚本与C程序
    • 让我能通过c语音的基础对sh更快的上手
  • sh控制语句
    • 能让我更快速便捷的掌控shell语言,进一步锻炼键盘控制电脑技能的掌握速度

十一、实验截图


实验代码

#!/bin/bash
echo "Hello World !"


实验代码为第七文段最后的小案例,出现报错经查验后发现没有给$1,$2进行定义,直接换成$RESULT1,$RESULT2便成功了
最后实验代码

#!/bin/bash
RESULT1=$(((2+3)*4))      #$((运算式))
echo "result1=$RESULT1"

RESULT2=$[(2+3)*4]      #$[运算式] 比较简单
echo "result2=$RESULT2"

TEMP=`expr 2 + 3`      #使用expr
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"

#两个参数(整数)的和
SUM4=$[ $RESULT1+$RESULT2 ]
echo "SUM=$SUM4"

实验成功截图


十二、程序设计语言有哪些必备的要素和技能

  • 1.必备要素

语法部分
关键字和保留字部分
变量部分
数据类型部分
操作符部分
语句部分
函数部分
复合类型部分

  • 2.必备技能

单元测试
重构

标签:脚本,变量,笔记,echo,学习,sh,参数,bash
来源: https://www.cnblogs.com/tzy20191327/p/15322203.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有