一、Shell脚本的执行通常可以采用以下几种方式:

  1. 1):bash script-namesh script-name(推荐使用)
  2. 2):path/script-name 或./script-name(当前路径下执行脚本)
  3. 3):source script-name . script-name #→注意”.”点号。
  4. 4):sh<script-namecat scripts-name|sh(同样适合bash)

二、普通变量:

1:环境变量:变量必须是大写

  1. 1):配置永久性的环境变量,全局变量的配置文件:/etc/profile 、/etc/bashrc 基本上使用 /etc/profile
  2. 2):配置用户的环境变量的配置文件,分别是:用户的主目录下的隐藏文件:~/.bash_profile 、 ~/.bash_bashrc
  3. 3):临时设置 # export ZSY=1
  4. 4):设置所有用户生效的目录 :/etc/profile.d/ :目录下必须是脚本否则无法使用
  5. 5):如果写一个JAVA的脚本,要把JAVA环境变量放入脚本内,特别是定时任务执行的时候
  6. 6):显示环境变量:
  7. (1):# env //* 显示的环境变量
  8. (2):# set //* 显示的环境变量跟多
  9. 7):取消环境变量
  10. (1):# unset <环境变量名> //* 临时取消变量
  11. (2):进入文件删除变量

2:环境变量的意义:

  1. 1):UID :当前用户的UID
  2. 2):USER :当前登录的用户
  3. 3):HOME :当前的用户主目录
  4. 4): _= :上一条命令的最后一个参数
  5. 5):BASH :调用实例时使用的全路径
  6. 6):PS1 :当前的终端
  7. 7):PATH :命令所在路径

3:局部变量:

  1. 1):一般连续的字符串,数字,路径等可以不加任何引号,不过无引号的情况最好用双引号替代之。
  2. 2):如果变量中使用其他变量时,则不可以使用单引号否则无法使用:如下:
  3. [root@centos6 ~]# a='$USER'
  4. [root@centos6 ~]# echo $a
  5. $USER
  6.  
  7. 3):如果变量中有空格的话,就必须使用双引号否则无法输出:如下:
  8. [root@centos6 ~]# a=1 2 3
  9. -bash: 2: command not found
  10. [root@centos6 ~]# a="1 2 3"
  11. [root@centos6 ~]# echo $a
  12. 1 2 3

4:引号的意义

  1. 1):无引号:把内容输出出来,会将未含有空格的字符串视为一个整体输出; 如果有命令(要在反引号中的)、变量、特殊转义符解析出结果然后子在输出最终内容来,如果字符串中有空格等特殊字符则则不能完整输出,需要加双引号,一般连续的字符串,数字,路径等可以不加任何引号, 不过无引号的情况最好用双引号替代之。
  2. 2):单引号:可以说是所见即所得:即将单引号内的所有内容都原样输出,或者描述为里面看到的是什么就会输出什么
  3. 3):双引号:把双引号内的所有内容都输出出来;如果有命令(要在反引号中的)、变量、特殊转义符解析出结果然后子在输出最终内容来。
  4. 4):反引号:一般用于执行命令,执行的时候命令会执行,同理可以使用 a=$(ls):结果相同

5:变量定义小结:

5.1. 普通变量:

  1. a=1 # 连续的数字字符串
  2. a="/etc/rc.local $USER" # 解析结果后输出
  3. a='$USER' # 原样输出

5.2. 命令内容定义:

  1. a=`ls` #反引号, 将反引号中字符当做命令输出
  2. a=$(ls)

5.3. 特殊变量:位置变量

1):$n :获取当前执行的shell脚本的第n个参数值(参数值默认以空格区分,如果参数加了双引号,则将双引号的整个作为一个参数, 不管其中是否有空格,如 例3 ),n=1..9 ,当 n 为0时表示脚本的文件名,如果n大于9,用大括号括起来${10},参数以空格隔开。如下:

  1. 1
  2. [root@centos6 ~]# echo $1 a
  3. a
  4. [root@centos6 ~]# echo $1 $2 a b
  5. a b
  6.  
  7. 2
  8. [root@centos6 ~]# cat p.sh
  9. echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}
  10. [root@centos6 ~]# sh p.sh {a..z}
  11. a b c d e f g h i j k l m n o
  12.  
  13. 3
  14. [root@centos6 ~]# cat p.sh
  15. echo $2
  16. [root@centos6 ~]# sh p.sh "1 2" "3 4"
  17. 3 4
  18.  
  19. # 注意当整数超过9 时,数字要使用 “{}” 扩起来否则会出现 以下结果
  20. [root@centos6 ~]# cat p.sh
  21. echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
  22. [root@centos6 ~]# sh p.sh {a..z}
  23. a b c d e f g h i a0 a1 a2 a3 a4 a5

2):$0 获取当前脚本本身的名字

  1. $1 # 获取当前传递给该shell脚本的第一个参数
  2. $2 # 获取当前传递给该shell脚本的第二个参数
  3. $# # 获取当前传给脚本的参数个数
  4. $$ # 获取当前脚本运行的当前进程 PID 号
  5. $@ # 获取当前传给脚本的所有参数的列表
  6. $* # 获取当前以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
  7. $? # 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

3):$1 是传递给该shell脚本的第一个参数,一般系统启动文件最后都有这个,作为接收输入的命令如

  1. # /etc/init.d/sshd start  # 是将 start 赋值给 $1,然后脚本根据这个参数执行这个参数下的命令:如下脚本:
  2. [root@centos6 ~]# cat p.sh
  3. case "$1" in
  4.   start)
  5.     echo "123" && exit 0
  6.     ;;
  7.   stop)
  8.     echo "234" && exit 0
  9.     ;;
  10. esac
  11. exit
  12. [root@centos6 ~]# /etp.sh start
  13. 123
  14. [root@centos6 ~]# sh p.sh stop
  15. 234

4):$0 是用来取脚本本身的名字,就是你命令之后跟的内个名字,如下图的 sh a.sh 中的 a.sh

  1. [root@centos6 ~]# cat a.sh
  2. echo $0
  3. [root@centos6 ~]# sh a.sh
  4. a.sh
  5.  
  6. 1:在启动脚本中也有 $0 ,当启动脚本的时候输入的不正确时就会出现
  7. [root@centos6 ~]# tail -4 /etc/init.d/sshd |head -1
  8. echo $"Usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status}"
  9. [root@centos6 ~]# /etc/init.d/sshd *
  10. 用法: /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status}
  11.  
  12. 2:将文件与名字分离
  13. [root@centos6 etc]# cat ~/a.sh
  14. dirname $0
  15. basename $0
  16. [root@centos6 etc]# sh ~/a.sh
  17. /root
  18. a.sh
  19.  
  20. # dirname $0 取得是路径
  21. # bashname $0 取得是名字

5):$# :获取当前传给脚本的所有参数的个数,一般用于控制参数个数,如例1.

  1. [root@centos6 ~]# cat a.sh
  2. echo $#
  3. [root@centos6 ~]# sh a.sh 1 2 3 4 5 6
  4. 6
  5.  
  6. 1:判断参数少于两个,就告诉报 脚本名加 "ARG1 ARG2" ,等于或大于两个参数时,显示钱两个参数
  7. [root@centos6 ~]# cat a.sh
  8. #!/bin/bash
  9. [ $# -ne 2 ] && {
  10. echo "$0 ARG1 ARG2"
  11. exit 1
  12. }
  13. echo $1 $2
  14. [root@centos6 ~]# sh a.sh
  15. a.sh ARG1 ARG2
  16. [root@centos6 ~]# sh a.sh 1 2
  17. 1 2
  18.  
  19. # 脚本中的 exit 1 指的是返回值:如下例2
  20.  
  21. 2
  22. [root@centos6 ~]# cat p.sh
  23. echo "123456789"
  24. exit 28
  25. [root@centos6 ~]# sh p.sh
  26. 123456789
  27. [root@centos6 ~]# sh p.sh ;echo $?
  28. 123456789
  29. 28

6):$? 命令执行的返回值,0表示没有错误,其他表示有错误

  1. [root@centos6 ~]# ls ; echo $?
  2. a.sh iptables.sh p.sh
  3. 0
  4. [root@centos6 ~]# 123 ; echo $?
  5. -bash: 123: command not found
  6. 127
  7.  
  8. # 分号就是间隔符,表示前面和后面是两个命令的意思,执行完前一个,再执行后一个,两个命令没有任何依赖关系

5.4. 返回值代表意义:

  1. 0 :成功
  2. 1 2 :权限拒接,表示权限不足
  3. 1~125 :表示运行失败,脚本命令、系统命令错误或参数传递错误;
  4. 126 :找到命令了,但是无法执行
  5. 127 :命令找不到,
  6. 大于128 :命令执行中退出

shell编程1:变量的使用与例子的更多相关文章

  1. Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...

  2. Linux编程 21 shell编程(环境变量,用户变量,命令替换)

    一.概述 这篇介绍shell的变量使用,跟其实语言一样,都有声明变量,使用变量,在shell中变量允许你临时地将信息存储中shell脚本中,以便和脚本的其他命令一起使用. 1.1 环境变量 在前面章节 ...

  3. Linux —— Shell编程之变量赋值和引用

    Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量.有三种主要的变量类型:环境变量.内部变量和用户变量. 环境变量(environment variable)是系统环境的一部分, ...

  4. Shell 编程 (变量和条件测试)

    变量: 1 . 变量声明 直接使用变量 + 赋值 #!/bin/bash NAME='HELLO WORD' echo $NAME 使用 declare 关键字声明 declare(选项)(参数) + ...

  5. Shell编程-02-Shell变量

    目录 什么是Shell变量 变量类型 环境变量初始化及其对应文件的生效顺序 什么是Shell变量     在初等数学数学方程式中,我们会经常碰到类似于这样的方程式:y=x+1 ,等号左右两边的x和y称 ...

  6. Linux Shell编程、变量、控制语句

    为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. 2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些 ...

  7. linux shell编程之变量和bash配置文件(第一篇)

    编程语言有两类 强类型:如C语言.数据具有其特定的类型,先声明定义后才能使用.数据运算时必须符合类型要求(如不能把字符串类型数据直接与整型数据做算数运算) 弱类型:如shell.数据默认为字符型,不用 ...

  8. SHELL编程概念&变量剖析

    一.shell软件概念和应用场景 1) 学习Linux技术,不是为了学习系统安装.命令操作.用户权限.配置IP.网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件.程序(Apa ...

  9. 一、shell编程与变量

    目录 命令是什么 命令是如何运行的: 基本语法 解释器 注释 如何执行 输入.输出流 重定向 管道符 | 变量 常见Shell变量的类型包括: 变量命名原则 单引号和双引号 反引号 变量作用范围 查看 ...

  10. Shell编程之变量进阶

    一.变量知识进阶 1.特殊的位置参数变量 实例1:测试$n(n为1...15) [root@codis-178 ~]# cat p.sh echo $1 [root@codis-178 ~]# sh ...

随机推荐

  1. linux4.11内核设备编译时出现的问题(参考博客并更改的)

    AllWinnerH3 linux4.11版本的bsp下载: https://pan.baidu.com/s/1mhU4a8K 密码: b375 H3-linux4.11_bsp目录就是所需的源码及编 ...

  2. Java--java中的基本数据类型以及对应的包装类

    基本数据类型 序号 数据类型 长度(位数) 默认值 1 byte(整数型) 8 0 2 short(整数型) 16 0 3 int(整数型) 32 0 4 long(整数型) 64 0 5 float ...

  3. mysql模糊匹配like及批量替换replace

    1.mysql 模糊匹配 like 与 not like 用法 : SELECT * FROM `user` where `nickname` LIKE '%测试%' SELECT * FROM `u ...

  4. HttpClient的userAgent和refer问题

    HttpClient本质是模拟浏览器去请求网址,获取请求response. 为了更真实的模拟浏览器,不被限制,需要设置一些请求header. 如果是爬虫的话,老虑的会更多些,爬取网站在HttpClie ...

  5. SpringBoot项目后台对接微信支付开发——微信统一下单接口开发

    开始没找到微信支付的sdk.自己根据官方给的接口文档纯手写,各种xml转JSON,JSON转xml,加密解密,签名....整个人都是崩溃的 开发的第三天,发现有官方的sdk.心情一下子豁然开朗,整个人 ...

  6. Django学习之视图层

    视图层 小白必会三板斧 HttpResponse render redirect django视图函数必须要给返回一个HttpResponse对象(render和redirect内部返回的也是一个Ht ...

  7. 吴裕雄--天生自然python学习笔记:解决WebDriverException: Message: unknown error: missing or invalid 'entry.level'

    会出现这个错误是因为你的chrome浏览器与下载的chromedriver.exe版本不一致造成的. 到这个地址:https://npm.taobao.org/mirrors/chromedriver ...

  8. python-django-redis拒绝连接问题解决_20191121

    今天安装fastdfs的时候,发现最好固定虚拟机的ip, 固定了ip之后,发现使用Windows中的pycharm连接redis的时候,总是拒绝连接,找了很多的办法都不行,有点慌, 但是不能慌,现在要 ...

  9. plague|commence|gymnasium|triumph|jump

    N-COUNT 瘟疫:疫病A plague is a very infectious disease that spreads quickly and kills large numbers of p ...

  10. [LC] 231. Power of Two

    Given an integer, write a function to determine if it is a power of two. Example 1: Input: 1 Output: ...