linux基础之shell编程(1)

shell:属于弱类型编程语言

什么是弱类型,什么是强类型?

  • 强类型:变量在使用前,必须事先声明,甚至还需要初始化;
  • 弱类型:变量用时声明,甚至不区分类型;

变量赋值,引用

赋值:VAR_NAME=VALUE

引用:${VARNAME} (花括号一般可以省略)

例:

[root@iZ28g26851kZ ~]# name=test --赋值
[root@iZ28g26851kZ ~]# echo $name  --引用
test
[root@iZ28g26851kZ ~]# 

bash变量类型

  • 环境变量

    export VARNAME=VALUE ; 作用域为当前shell进程及其子进程。

    命令行中启动的脚本会继承当前shell环境变量;

    系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量;

    例:

    [root@iZ28g26851kZ ~]# JAVA_HOME=/opt/java/jdk7/
    [root@iZ28g26851kZ ~]# export JAVA_HOME
    [root@iZ28g26851kZ ~]# echo $JAVA_HOME
    /opt/java/jdk7/
    [root@iZ28g26851kZ ~]# 
  • 本地变量

    set VARNAME=VALUE: 作用域为整个bash进程;(set关键字 可以省略)

  • 局部变量

    local VARNAME=VALUE:作用域为当前代码段;(local 是关键字)

  • 位置变量

    $1,$2, ...

    位置变量是用来引用脚本的参数的

  • 特殊变量

    特殊变量是用来保存一些特殊数据的。

    $?:上一个命令的执行状态返回值;

    例:

    [[email protected] ~]# ls
    libiconv-1.14         mhash-0.9.4.tar.gz  mysql-5.1.51.tar.gz  nginx-1.8.0.tar.gz
    libiconv-1.14.tar.gz  mysql-5.1.51        nginx-1.8.0
    [[email protected] ~]# echo $?
    0
    [[email protected] ~]# lsss
    -bash: lsss: command not found
    [[email protected] ~]# echo $?
    127
    [[email protected] ~]# 

    可以看出,当执行命令成功和失败时,$? 的值是不同的

    0: 正确执行

    1-255:错误执行;(1,2,127系统预留)

/dev/null

软件设备,bit bucket,数据黑洞

什么意思呢?

当命令执行的结果我们不需要显示出来时,就可以重定向到/dev/null中,数据不会在/dev/null中保存,所以不会产生垃圾数据

例:

[root@iZ28g26851kZ ~]# ls &> /dev/null
[root@iZ28g26851kZ ~]# cat /dev/null  --可以发现,数据并不存在
[root@iZ28g26851kZ ~]# echo $?
0
[root@iZ28g26851kZ ~]# lsss &> /dev/null
[root@iZ28g26851kZ ~]# echo $?
127
[root@iZ28g26851kZ ~]# 

这样就可以只获取命令是否执行成功的状态,而不需要知道命令执行的详细结果

释放(撤销)变量

unset VARNAME

例:

[root@iZ28g26851kZ ~]# echo $name
test
[root@iZ28g26851kZ ~]# unset name
[root@iZ28g26851kZ ~]# echo $name

[root@iZ28g26851kZ ~]# 

操作变量时,什么时候加$符号,什么时候不加$符号

  • 操作变量本身不需要加$符号
  • 操作变量的值要加$符号

查看当前shell中的变量

set 不加任何参数可以列出当前所有变量

查看当前shell中的环境变量

printenv

env

export

给字符串变量追加值

对于shell来说,默认所有的变量都是字符串

[root@iZ28g26851kZ ~]# mylist=www
[root@iZ28g26851kZ ~]# mylist=${mylist}qqq
[root@iZ28g26851kZ ~]# echo $mylist
wwwqqq
[root@iZ28g26851kZ ~]# 

那么问题来了,如果设置java的环境变量?

[root@iZ28g26851kZ ~]# export PATH=$PATH:${JAVA_HOME}/bin
[root@iZ28g26851kZ ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/opt/java/jdk7/bin
[root@iZ28g26851kZ ~]# 

当然这样只是临时的,退出当前shell后就失效了

如何让自己写的文件当脚本执行

在文件开头加上 #!/bin/bash 就行了

#! 叫 shebang(魔数) ,用来指定脚本解释器的路径,所以这里写上/bin/bash 就行了

例:

#!/bin/bash
#这是注释
ls -al
~
~           

将文件保存为list.sh(当然文件名可以随便写)

此时文件还没有x权限

-rw-r--r--  1 root root        33 May  7 12:00 list.sh

添加权限

[root@iZ28g26851kZ ~]# chmod +x list.sh

好,现在执行,

[root@iZ28g26851kZ ~]# list.sh
-bash: list.sh: command not found
[root@iZ28g26851kZ ~]# 

居然不行???,

好吧,其实是当执行一个命令时,系统默认会先去环境变量的路径下寻找可执行程序,

也可以直接给定可执行程序的路径,

[[email protected] ~]# ./list.sh
total 30364
dr-xr-x---.  5 root root      4096 May  7 12:03 .
dr-xr-xr-x. 22 root root      4096 Dec 27 23:24 ..
-rw-------   1 root root     12296 May  7 08:52 .bash_history
-rw-r--r--.  1 root root        18 May 20  2009 .bash_logout
-rw-r--r--   1 root root       270 May  7 08:52 .bash_profile
-rw-r--r--.  1 root root       176 Sep 23  2004 .bashrc
-rw-r--r--.  1 root root       100 Sep 23  2004 .cshrc
-rw-------   1 root root        41 May  3 17:36 .lesshst
、、、、、、、、、、、、、、、、、
-rw-r--r--.  1 root root       129 Dec  4  2004 .tcshrc
-rw-------   1 root root      6937 May  7 12:03 .viminfo
[[email protected] ~]# 

哈哈,这样就搞定了~

时间: 2024-10-28 20:18:23

linux基础之shell编程(1)的相关文章

linux 基础与shell编程[笔记]

linux 基础与shell编程 linux 系统知识 linux是一个OS ,也是一个完全免费 开源 自由软件 linux 1991   荷兰大学生课程设计   unix GPL协议 GPL:General Public License 是一份GNU(完全自由软件操作系统)是一个广泛使用的自由软件许可证条款 常见的linux发行版本: Debian:Debian为一款提供您安装在计算机上使用的操作系统 (OS).操作系统就是能让您的计算机工作 的一系列基本程序和实用工具.由于 Debian 采

linux基础之shell编程(2)-条件判断,算数运算,测试

bash中如果实现条件判断? 条件测试类型 整数测试 字符测试 文件测试 条件测试的表达式 有三种 [ expression ] --方括号与表达式之间一定要有一个空格 [[ expression ]] test expression 整数测试 -eq: 测试两个整数是否相等 例:$A -eq $B -ne: 测试两个整数是否不等 不等为真,相等为假 -gt: 测试一个数是否大于另一个数:大于,为真:否则,为假: -lt: 测试一个数是否小于另一个数:小于,为真:否则,为假: -ge: 大于或等

linux基础之shell编程(4)-for循环

for循环 用法: for 变量 in 列表; do 循环体 done 那么如何生成列表呢? {1..100} 这样就能生成列表了 =========================================== 例: #!/bin/bash # for I in {1..100};do echo $I done seq 用seq命令也可以生成列表 用法: seq [起始数 [步进长度]] 结束数 例: [root@iZ28g26851kZ ~]# seq 1 10 1 2 3 4 5 6

linux基础之shell编程(3)-给脚本设置参数

bash的变量类型 本地变量(局部变量) 环境变量 位置变量:$1,$2,$3, ... 特殊变量:$?,$#,$*,[email protected] 那让脚本拥有获取外界参数的能力就要用的位置变量,$1代表第一个参数,$2代表第二个参数,依次类推 例: vartest.sh #!/bin/bash # ONEVAR=$1 TWOVAR=$2 THREEVAR=$3 echo "第一个参数是:${ONEVAR}" echo "第二个参数是:${TWOVAR}" e

Linux下的shell编程入门

通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应.一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率.要达到这样的目的,通常我们利用shell程序或者shell脚本来实现. 一.简介 Shell编程有很多类似C语言和其他程序语言的特征,但是又没有编程语言那样复杂.Shell程序就是放在一个文件中的一系列Linux命令和实用程序,在执行的时候,通过Linux一个接着一个地解释和执行每个命令. 下面我们来看一个简单的shell程序: 1.首先建立一个

Linux基础知识——shell命令类型及命令使用帮助

加入马帮有一段时间了,看到群里面大总管要检查博客,才意识到,原来我还没有写过作业.俗话说的好,时间是把杀猪刀!!!咳咳,其实想说,马哥视频忒长,内容贼多,对于文笔不好我来说,写作业压力山大啊,有木有.嗯.嗯,长话短说,进入正题. 两个星期过去,课程进度有点掉队,这篇博文主要记录基础命令课程知识,用于梳理知识点并加深印象,为今后行走linux之路打下坚实基础的好开端,完成该博文并回顾相关知识点后,期望加快学习步伐,稳扎稳打,跟上进度,good good study,day day up! 1.  

Linux学习之Shell编程基础

转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.  当编辑好脚本时,如果要执行该脚本,还必须使其可执行.  要使脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 1.2 注释  在进行shell编程时,以#开头的

Linux与Unix shell编程指南(完整高清版).pdf

找到一本很详细的Linux Shell脚本教程,其实里面不光讲了Shell脚本编程,还介绍了系统的各种命令 http://vdisk.weibo.com/s/yVBlEojGMQMpv 本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题.本书内容全面.文字简洁流畅,适合Shell编程人员学习.参考. 目      录 译者序 前言 第一部分   shell 第1章   文件安全与权限 1 1.1   文件 1 1.2   文件

零基础学习Shell编程

一:起因 (0)也许由于一时的冲动使得你开始关注并学习shell编程:亦许由于是"道听途说"shell的威力很大:亦许由于shell编程的魅力:亦许由于作为一个coder的偏好:亦许-- (1)先来搞清楚为什么要学shell,学习要有目的性 ---- 简单的说shell就是一个包含若干行Shell或者Linux命令的文件.对于一次编写,多次使用的大量命令,就可以使用单独的文件保存下来,以便日后使用. shell简单.灵活.高效,特别适合处理一些系统管理方面的小问题 shell可以实现自