美文网首页
shell脚本了解

shell脚本了解

作者: WhiteStruggle | 来源:发表于2020-09-14 20:20 被阅读0次

[toc]

shell版本

擅长处理纯文本类型的数据

弱类型语言

通用的标准 Bourne shell (sh)C shell (csh) ,其中 Bourne shell (sh)bash shell 取代

优势: 在于处理操作系统底层业务(大量的命令)

shell种类

  • Bourne shell ( 包括 sh、ksh、bash )
Bourne shell (sh)
Korn shell (ksh)
Bourne Again shell (bash)
POSIX shell (sh)
  • C shell ( 包括 sch 、 tcsh)
C shell (csh)
TENEX/TOPS C shell (tcsh)

常见操作系统的默认shell

  • linuxBourne Again shell (bash)
  • SolarisFreeBSDBourne shell (sh)
  • AIX (IBM的Unix) 是 Korn shell (ksh)
  • HP-Unix( 惠普的Unix) 是 POSIX shell (sh)

查看linux系统默认的shell:

方法一:
root@ubuntu:~# echo $SHELL
/bin/bash
方法二:
root@ubuntu:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
nm-openvpn:x:117:125:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin

shell脚本的建立和执行

使用编辑器 vi/vim 编辑器

脚本开头

#!/bin/bash   标准写法
或
#!/bin/sh

#! 称为 幻数,在执行 bash 脚本时,内核会确定用什么解释脚本的内容,必须在脚本的第一行,否则会被解释为 注释

Linux中常见脚本开头的编码语法:

#!/bin/sh
#!/bin/bash
#!/bin/sed          # sed 脚本
#!/usr/bin/awk      # awk 语言
#!/usr/bin/env python # python 语言
#!/usr/bin/expect
#!/usr/bin/perl
#!/usr/bin/tel

若脚本开头不指定解释器,则需要对应的解释器来执行脚本

脚本注释

shell脚本 中 井号(#) 后面的内容都是注释的内容

bash 与 dash

Debian和Ubuntu中,/bin/sh默认已经指向dash,是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准

root@ubuntu:~# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 11月 12  2019 /bin/sh -> dash

root@ubuntu:~# ll /bin/sh
lrwxrwxrwx 1 root root 4 11月 12  2019 /bin/sh -> dash*

dash解释器可能会使得一些bash语法写的shell 脚本不能运行

切换默认的 /bin/sh 指向 bash

root@ubuntu:~# sudo dpkg-reconfigure dash

弹出界面修改,询问你是否使用dash作为默认的 /bin/sh

修改的话就选择: 否 

修改之后查看

root@ubuntu:~# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 7月  25 11:04 /bin/sh -> bash

脚本的执行

shell 脚本是 以 非交互的方式运行时,先查找环境变量( ENV ),该变量指定了一个环境文件( .bashrc) ,然后改环境变量文件开始执行,读取env文件后,开始执行shell脚本内容

linux 环境下的 /etc/profile 存放至全局的环境变量文件

若文件定义的变量放在etc/profile.d/目录中,会默认为环境变量

查看用户的环境变量:

ll /home/yz-0127/ -al

shell脚本的执行通常可以采用的方式:

  1. bash 脚本全路径sh 脚本全路径

当脚本文件本身没有可执行权限,或者文件开头没有指定解释器

yz-0127@ubuntu:~$ bash /mysh/demo.sh
hello World!
  1. 脚本全路径
yz-0127@ubuntu:~$ /mysh/demo.sh
hello World!
  1. source 脚本全路径. 脚本全路径
yz-0127@ubuntu:~$ source /mysh/demo.sh
hello World!

注意:利用tab补全路径,当不能补全时,说明没有文件的权限

反引号( ` ` ) 会解释 一些命令

source和.与其他方式的区别

source. 相当于 PHP 中的 include ,引入其他脚本的文件

root@ubuntu:~# cat 5.sh
#!/bin/bash
user=`whoami`
root@ubuntu:~# bash 5.sh
root@ubuntu:~# echo $user

root@ubuntu:~# source 5.sh
root@ubuntu:~# echo $user
root
root@ubuntu:~# 

基本规范

  1. 开头指定脚本解释器
#!/bin/bash
  1. 开头加上版本版权等信息
# Date :更新时间
# Author : 作者
# Mail: 邮箱
# Function : 脚本功能
# Version  : 版本

可以配置vim编辑文件时自动加上信息,方法时 修改 /.vimrc 配置文件

  1. 脚本中尽量不要用中文,注释也用英文标识

linux对中文支持不好

  1. 扩展名 .sh
  1. 中括号[] 两端要有空格
[ yz ]
  1. 流程控制语句 一次性完成轮廓,然后再书写具体内容
  1. 通过缩进使代码更易读

变量基础及深入

分类:

  • 环境变量(全局变量)
  • 局部变量

局部变量只能在创建他们的shell函数或脚本中使用

环境变量也称全局变量,可以在创建他们的shell函数 及其 派生出来的任意子进程shell中使用

存在着一些专用的shell变量

环境变量

环境变量可以在命令行中设置,但档用户退出时,这些变量值就会丢失,因此最好在用户 /home 目录下 的 .bash_profile 文件中或 全局配置 /etc/bash.bashrc /etc/profile 文件 或 /etc/profile.d/ 中定义

系统在加载过程中,会把先把全部的全局变量加载

将环境变量方如 profile 文件中,每次用户登录时这些变量都会被初始化

  • 所有的环境变量大写
  • 环境变量用于用户进程前,必须使用export内置命令导出的变量

例如:

root@ubuntu:~# echo $HOME
/root
root@ubuntu:~# echo $USER
root
root@ubuntu:~# echo $uid

root@ubuntu:~# echo $UID
root@ubuntu:~# echo $UID
0
root@ubuntu:~# echo $SHELL
/bin/bash

设置环境变量

在给变量赋值之后或设置变量时使用 export 命令

或者 带 -x 选项的 declare 内置命令

注意 : 输出变量时候不能再变量名前加 $

格式:

(1) export 变量名 = value
(2) 变量名 = value : export 变量名
(3) declare -x 变量名 = value

自定义环境变量,在生产环境中需要一些配置文件,例如 java环境配置实例

一般的配置环境变量放在 /etc/profile`

取消环境变量

显示默认的环境变量:

root@ubuntu:~# env
root@ubuntu:~# printenv
root@ubuntu:~# set

unset 取消 本地变量和环境变量

root@ubuntu:~# echo $USER
root
root@ubuntu:~# unset USER
root@ubuntu:~# echo $USER

root@ubuntu:~# 

unset 取消变量,退出用户,再次登录还是会存在,想要彻底取消,需要书写的配置文件中

局部变量(本地变量)

本地变量在用户当前的shell生存期的脚本中使用

当在shell中启动另一个进程或退出,本地变量就会失效

定义方法:

变量名 = value

用于:直接定义变量的内容,内容一般为简单连续的数字、字符串、路径名等

a = 33
b = yes
变量名 = 'value'

单引号定义变量 , 内容中是什么就会输出什么,变量不会被解析
用于:定义显示纯字符串

a = 'WRONG'
变量名 = "value"

双引号定义变量
用于:字符串中附带有变量的内容的定义

a = "this is wrong"

例如:

root@ubuntu:~# a=192.168.1.2
root@ubuntu:~# b='193.168.1.2'
root@ubuntu:~# c="194.168.1.2"
root@ubuntu:~# echo "a=$a"
a=192.168.1.2
root@ubuntu:~# echo "b=$b"
b=193.168.1.2
root@ubuntu:~# echo "c=${c}"
c=194.168.1.2
root@ubuntu:~# 

单引号'' 不会解析其内容

root@ubuntu:~# echo 'a=$a'
a=$a

命名规范:

  1. 变量命名要统一,使用大写字母
  2. 予以要清晰,能够表达变量内容的含义
  3. 过长的单词使用 单词前几个字母 代替
  4. 多个单词连接使用 "_" 连接
  5. 避免无含义的字符或数字
  6. 使用变量时,采用大括号,会比较清晰
  7. 字符串变量通常用双引号括起来,减少怪异的错误

局部变量规范:

使用local定义变量,代表只在脚本中的函数体生效

local a;

把命令定义为变量

  1. 利用 反引号( `` ) ,定义变量
root@ubuntu:~# time=`date +%F`
root@ubuntu:~# echo $time
2020-07-29
  1. 利用小括号,定义变量 (常用)
root@ubuntu:~# time=$(date +%F)
root@ubuntu:~# echo $time
2020-07-29

相关文章

  • shell-初步+变量

    1.shell初步了解 1.1 什么是Shell 1.2.什么是Shell脚本 1.3. 脚本语言的种类 She...

  • shell脚本了解

    [toc] shell版本 擅长处理纯文本类型的数据 弱类型语言 通用的标准 Bourne shell (sh) ...

  • iOS开发逆向之应用重签名(下)

    本文主要介绍通过shell脚本进行应用重签名 补充知识 在利用shell脚本重签名之前,需要了解以下知识:脚本常用...

  • Shell入门笔记

    Shell脚本:Linux Shell脚本学习指南菜鸟教程 - Shell教程Linux入门 - Shell脚本是...

  • 2018-09-26

    shell脚本 1.1、什么是shell脚本(shell script , ...

  • Shell script + crontab实现Mysql定时备

    一、Shell 脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 业界所...

  • 嵌入式day12

    shell脚本的本质 shell脚本语言是解释型语言 shell脚本的本质:shell命令的有序集合 shell编...

  • shell脚本1了解

    1:了解liunx命令2:若干个命令写到一个文件3:离不开逻辑判断和循环遍历4:正则三剑客grep sed awk...

  • 简单了解Shell脚本

    在软件领域,语言主要分为两大类,脚本编程(scripting)语言和编译型(compiled)语言。 许多大型或中...

  • shell脚本

    什么是shell脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。业界所说...

网友评论

      本文标题:shell脚本了解

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