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

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

二、普通变量:

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

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

2:环境变量的意义:

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

3:局部变量:

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

4:引号的意义

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

5:变量定义小结:

5.1. 普通变量:

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

5.2. 命令内容定义:

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

5.3. 特殊变量:位置变量

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

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

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

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

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

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

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

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

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

    [root@centos6 ~]# cat a.sh
echo $#
[root@centos6 ~]# sh a.sh 1 2 3 4 5 6
6 例1:判断参数少于两个,就告诉报 脚本名加 "ARG1 ARG2" ,等于或大于两个参数时,显示钱两个参数
[root@centos6 ~]# cat a.sh
#!/bin/bash
[ $# -ne 2 ] && {
echo "$0 ARG1 ARG2"
exit 1
}
echo $1 $2
[root@centos6 ~]# sh a.sh
a.sh ARG1 ARG2
[root@centos6 ~]# sh a.sh 1 2
1 2 # 脚本中的 exit 1 指的是返回值:如下例2 例2:
[root@centos6 ~]# cat p.sh
echo "123456789"
exit 28
[root@centos6 ~]# sh p.sh
123456789
[root@centos6 ~]# sh p.sh ;echo $?
123456789
28

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

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

5.4. 返回值代表意义:

0 :成功
1 或 2 :权限拒接,表示权限不足
1~125 :表示运行失败,脚本命令、系统命令错误或参数传递错误;
126 :找到命令了,但是无法执行
127 :命令找不到,
大于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. ubuntu下切换默认的python版本

    Ubuntu系统自带python2.7(默认)和python3.5,所以不需要自己安装python.我们可以使用命令python -V或python3 -V来查看默认的python版本. 现在越来越多 ...

  2. Django数据迁移时提示 ModuleNotFoundError: No module named 'users'

    执行数据迁移时提示找不到对应的APP,错误如下: 这个错误主要是路径找不到引起的,只需在settings文件夹中添加app文件路径即可 sys.path.insert(0, os.path.join( ...

  3. P2486 [SDOI2011]染色 区间合并+树链剖分(加深对线段树的理解)

    #include<bits/stdc++.h> using namespace std; ; struct node{ int l,r,cnt,lazy; node(,,,):l(l1), ...

  4. addEventListener和onclick的区别

    onclick只出现一次alert:我是click2[很正常第一次click事件会被第二次所覆盖],但是addEventListener却可以先后运行,不会被覆盖[正如:它允许给一个事件注册多个监听器 ...

  5. Python练习五-函数

    1.简述普通参数.指定参数.默认参数.动态参数的区别1)普通参数中,有形参和实参,其中形参是定义函数时写的参数,实参是调用函数时传给函数的参数:2)默认参数是在定义函数时,参数设定一个默认值:3)指定 ...

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

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

  7. python或pip'不是内部或外部命令”

    Python不是内部外部命令:说明在环境变量中没有添加python的安装文件夹路径 所以我们在path环境变量中添加 E:\python36; Pip不是内部外部命令:说明在环境变量中没有添加pyth ...

  8. html5页面编码如何确定

    页面乱码问题建站学之前曾经多次发教程说明,对于新的html5来说我们的编码要如何做才能解决乱码问题呢?作为一个前端工程师,你是如何指定一个页面的编码的呢?你知道浏览器是怎么识别编码的吗? 首先,一个很 ...

  9. spring mvc 设置@Scope("prototype")

    spring中bean的scope属性,有如下5种类型: singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例 prototype表示每次获得be ...

  10. node-sass 安装失败的各种坑

    开始的时候引入别人的一个项目 npm install npm run dev 启动项目 报错 > node build/dev-server.js Listening at http://loc ...