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, ...
    位置变量是用来引用脚本的参数的

  • 特殊变量

    特殊变量是用来保存一些特殊数据的。
    $?:上一个命令的执行状态返回值;
    例:

    [root@iZ28g26851kZ ~]# 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
    [root@iZ28g26851kZ ~]# echo $?
    0
    [root@iZ28g26851kZ ~]# lsss
    -bash: lsss: command not found
    [root@iZ28g26851kZ ~]# echo $?
    127
    [root@iZ28g26851kZ ~]# 

    可以看出,当执行命令成功和失败时,$? 的值是不同的
    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 ~]# 

居然不行???,
好吧,其实是当执行一个命令时,系统默认会先去环境变量的路径下寻找可执行程序,
也可以直接给定可执行程序的路径,

[root@iZ28g26851kZ ~]# ./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
[root@iZ28g26851kZ ~]# 

哈哈,这样就搞定了~

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
问题 我们使用Spring-test的时候使用如下的代码 @RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (locations={ "classpath:springmvc-servlet-test.xml" , "classpath:application-context-datasource-test.xml" , "classpath:springbeans/mq-beans-test.xml" , "classpath:
继上面第二个springboot项目后,今晚应朋友需求帮忙写个抽奖程序,想着就用springboot+servlet去发布一个服务给前端直接调用或者后端直接调用。 下面来介绍一下: 1、不错,依然需要一个Application的启动springboot的入口 import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import
Centos6.5kickstart无人值守安装 方法:Vsftpd+TFTP+DHCP+Kickstart+PXE 一:环境 一台已经装好操作系统的机子(192.168.1.5)和一台未装操作系统的机子 1 . 未装操作系统的机子首先做 raid,以 dell r710 为例,6 块硬盘,一般两块做 raid1, 剩下四块做 raid5。 2. 已经装了操作系统的机子首先检查是否安装 vsftpd,dhcpd,tftp,若没装则依次安装,关闭 iptables,selinux。 /etc/init.d/
hibernate是什么 hibernate是一个ormapping框架 hibernate是一个操作数据库的操作框架 为什么要使用hibernate jdbc的缺点 1、代码相当繁琐 2、从一个数据库移值到另外一个数据库,得改变很多内容,比较差 3、看下图: 在进行请求的时候,直接从内存中提取数据就可以了,这样的过程称为数据缓存 Jdbc虽然提供了数据库连接池,但是没有提供数据缓存 4、jdbc技术是面向sql语句操作,而不是面向对象操作的 jdbc的优点:效率高 hibernate的优缺点: 优点:

浅谈框架和架构的区别 - 2016-05-08 19:05:55

前言     在验收机房合作的时候,抛出来几个问题,其中一个是框架和架构意义一样吗?有什么区别,既然分为了两个词,当然意义不能一样了,但是它们到底有什么区别呢?本菜鸟通过查询资料,在众多的资料中,抽取了一些共同点。 内容 框架:     框架是一种特殊的软件,并不能提供完整无缺的解决方案,但是它却为构建整个解决方案提供了基础。也有的说,框架其实相对于产品来说,已经是个半成品了,并且框架中的服务最终被应用系统直接调用,而框架的扩展点是供应用开发人员定制的“可变点”。 架构:     架构不是软件,而是一种设
不容易啊,天气热得厉害,终于到了周末却哪里也去不了,昨晚就特意向老婆申请了一段不长不短的周末时间用来总结近期的工作,也实属不易,如果申请没有获得批准,我也只好利用夜晚了, 因为我几乎是一个不用怎么睡觉,可吃可不吃的人,只要有水,烧酒,就好了...大早上的,热醒了,看来也用不到我申请的时间了。 ...此时是早上4点半... RFC2018描述了TCP SACK的规范,主要是规范了SACK的定义以及在使用该特性的时候,发送端和接收端的行为建议。RFC文档本身非常容易读懂,建议通读一遍,花不了半小时,我之所以还要
链表 可以用任意一组存储单元来存储单链表中数据元素(存储单元可以是不连续的),而且,除了存储每个数据元素ai的值以外,还必须存储指示其直接后继元素的信息。这两部分信息组成的数据元素ai的存储映像称为结点。N个结点链在一起被称为链表,当结点只包含其后继结点的信息的链表就被称为单链表。 链表定义如下数据类来存储结点信息: public class Node { Node next = null ; int data; public Node ( int data){ this .data = data; }}

系统架构师成长之路(一) - 2016-05-08 19:05:37

背景: 系统架构师是近几年来在国内外迅速成长并发展良好的一个职业,它对系统开发和信息化建设的重要性及给IT业所带来的影响是不言而喻的。在我国,虽然系统架构师的职业在工作内容、工作职责以及工作边界等方面还存在一定的模糊性和不确定性,但它确实是时代发展的需要,并正在实践中不断完善和成熟。     通常从组织上划分,架构师分为以下几大类:业务架构师(Business Architect)、主题领域架构师(Domain Architect)、技术架构师(Technology Architect)、项目架构师(J2

【JAVA】堆实现 - 2016-05-08 19:05:37

二叉堆的实现 特性 结构性: 堆是一颗完全二叉树( complete binary tree ):一棵完全被填满的树,低层上的元素从左到右填入 堆序性 最小堆的最小元在根上,并且每个子堆也都满足父节点不大于子节点 基本的堆操作 insert(插入) 在下一个可用位置添加一个空穴 将该空穴与其父元素比较,若 a. 空穴父元素,交换两者位置,继续 2 操作 b. 空穴=父元素,停止,将空穴赋值为带插入元素 上述操作称作 上滤 ( percolate up ) deleteMin(删除最小元) 在根节点建立空穴

Linux配置IP地址的方法 - 2016-05-08 19:05:37

ifconfig命令临时配置IP地址 ifconfig命令:查看与配置网络状态的命令 // 查看当前网络状态 #ifconfig // 配置网卡的临时生效的IP地址 #ifconfig eth0 192.168.0.200 netmask 255.255.255. 0 // 配置网关 route add default gw 192.168 .0 .1 setup工具永久配置IP地址 RedHat专有图形化工具setup进行永久配置IP地址。 // 使用setup工具配置,启用DHCP时选择*,不启用为空