Shell

作者: 够浪你大哥 | 来源:发表于2019-03-04 17:09 被阅读0次

shell是一个命令行解析器,它接收应用程序/用户命令,然后调用操作系统内核.
shell还是一个功能相当强大的编程语音,易编写,易调试,灵活性强.
shell命令,在linux终端能够被解析出来的命令,shell脚本就是由多个shell命令的集合,逻辑判断,循环,函数,变量
bash解析过程:
监测终端输入,有回车的时候输入完成,bash检测环境变量 path -> 有个路径,bash从前往后衣服遍历每个路径,检测各个路径中有没有用户输入的命令,如果找到了,执行该路径下的命令,如果没有找到,找下一个,最后还是没有找到,则提示这个命令无法解析.


image.png

脚本格式以#!/bin/bash开头(指定解析器,这行可以省略不写)

#!/bin/bash
echo "honghonghuohuo"
运行脚本文件
$ sh helloworld.sh
$ bash helloworld.sh
添加执行权限:
普通目录的权限是:775.普通文件是:664
$ chmod 777 helloworld.sh
自己调用自己
$ ./helloworld.sh 

变量

$HOME  家目录路径
$PWD    当前所在路径
$SHELL  默认解析器
$USER    当前用户
自定义变量(声明时,等号两侧不能有空格)
$ A=1
$ D="banzhuang love mm"    (如果有空格,可以用引号括起来)

撤销定义过的变量
$ unset A

声明静态变量
$ readonly B=3    (不能unset)

提升为全局变量
$ export D
$ set D

特殊变量

$0-$9
可以获取外部传入的参数作为输出
Bryme-2:datas bryme$ cat teshu.sh 
#!/bin/bash
echo "$0 $1 $2 $3"
$0代表该脚本的名称,$1-$9代表第一到第九个参数,当参数个数到达10个以上时用大括号包裹起来,如${10}

$#
获取输入参数的个数,用于循环
$ cat teshu.sh 
#!/bin/bash
echo "$0 $1 $2 $3"
echo $#
用来获取当前传入参数的个数
$ bash teshu.sh banzhang
teshu.sh banzhang  
1

$*
代表命令行中所有的参数,把所有的参数看成一个整体

$@
这个变量也代表命令行中所有的参数,不过吧每个参数区分对待
这两个的实际效果是一样的
$ bash teshu.sh banzhang mm
teshu.sh banzhang mm 
2
banzhang mm
banzhang mm

$?
用来提示最后一次执行命令的返回状态,如果这个变量的值为0,证明上一个命令正确的执行了.如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了,
$ ./helloworld.sh 
honghonghuohuo
banzhuang love mm
Bryme-2:datas bryme$ echo $?
0
"0"代表执行成功,非"0"值代表执行失败
$$
脚本执行之后的进程ID

运算符

$ expr 3 + 2
5
$ expr `expr 3 + 2` \* 4
20
$ s=$[(2+3)*4]
$ echo $s
20
expr方式运算符左右要有空格,连续运算时要用反单引号括起来
$(())方式不能有空格

条件判断

[ condition ]
condition的前后必须有空格,条件非空即为true,[  ]返回false
成立为0,不成立为1
$ [ 23 -gt 22 ]
$ echo $?
0
$ [ 23 -le 22 ]
$ echo $?
1
$ [ -w helloworld.sh ]
$ echo $?
0

常用判断条件>>>>>>>>>>>>>>
两个整数之间比较------------------
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
按照文件权限进行判断--------------------
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
按照文件类型进行判断----------------------
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)

if判断>>>>>>>>>>>>>>>>>>>>>>

$ cat if.sh 
#!/bin/bash
if [ $1 -eq 1 ]
then
    echo "wangbaduzi"
elif [ $1 -eq 2 ]
then
    echo "dashabi"
fi
[ 条件判断式 ],中括号和条件判断之间必须有空格
if后面必须加空格

case 语句

$ cat case.sh 
#!/bin/bash
case $1 in
1)
    echo "nibaba"
;;
2)
    echo "nimama"
;;
*)
    echo "ninainani"
;;
esac
case行尾必须为单词"in",每一个模式匹配必须以右括号")"结束
双分号";;"表示命令序列结束,相当于golang中的break
最后后的"*)"表示默认迷失,相当于golang中的default

相关文章

  • Shell 学习

    shell 变量 shell 参数传递 shell 数组 shell 运算符 shell echo 命令 prin...

  • Shell 概述

    学习 Shell 主要包括的内容: Shell 脚本入门 Shell 变量 Shell 内置命令 Shell 运算...

  • Shell 教程

    Shell 变量 Shell 传递参数 Shell 数组 Shell 基本运算符 Shell echo 命令 Sh...

  • shell 第一天

    shell编程初识 1.1 shell编程初识 shell的定义 Shell 是命令解释器 Shell 也是...

  • shell 案例

    Shell编程一 Shell防范ARP攻击 Shell编程二 Shell防范DDos攻击 Shell编程三 ...

  • 【生物信息笔记】shell 脚本 (dry-2)

    shell 和 shell script(脚本)区别: shell 和 shell 脚本是两个不同概念,shell...

  • Linux Shell:基础知识和Shell变量

    摘要:Linux,Shell 整理Shell内容要点: Shell基础知识 Shell变量的类型 Shell变量赋...

  • Shell脚本语言一

    一、语法 格式 运行 Shell变量 Shell字符串 Shell数组 Shell注释 Shell传递参数 She...

  • 使用shell脚本

    使用方式 shell 变量 shell 字符串操作 shell 数组 shell 注释 shell 命令行参数 s...

  • vim学习 09——shell命令

    vim学习 09——shell命令 执行 shell 命令 :!shell命令 : 可以执行 shell 命令。 ...

网友评论

      本文标题:Shell

      本文链接:https://www.haomeiwen.com/subject/viiiuqtx.html