Linux是什么? Linux和Unix的区别是什么

  linux的英文解释为 linux is not unix,他最初是由芬兰人linux因为个人爱好而写出来的,它是一套免费开源、自由使用的的类似unix的操作系统。 

  实际上,两者的主要区别就是unix不是开源的,但是他是鼻祖,而linux是开源的,他绝大多数是unix而来,只是发扬的更好一些,比如佛教本身是印度的,但是中国的佛教更加广为流传,不可或缺。

  linux在服务器端具有很高的地位,通常服务器使用的就是LAMP(Linux + apache + mysql + php)的组合或者是LNMP(linux + nginx + mysql + php)的组合。 

  

Linux和windows的区别是什么

  一般,API基于windows,php基于linux。 

  目前国内来说,Linux更多的使用在服务器上,而桌面操作系统使用的时windows,区别如下:

Linux && shell_用户组

  

 

Linux系统目录结构

  登录系统之后,在当前命令窗口下输入命令:



1s /


  目录结构如下所示:

Linux && shell_linux系统_02

  • /bin bin是Binary的缩写,这个目录存放着最经常使用的命令; 
  • /boot boot其实启动的意思,比如重启就是reboot,这里存放了启动linux时使用的一些核心文件,包括一些链接文件和镜像文件。
  • /dev dev是device(设备)的缩写,该目录下存放的时linux的外部设备,在linux中访问外部设备的方式和访问文件的方式是相同的。
  • /etc 这个目录是用来存放所有的系统管理所需要的配置文件和子目录。
  • /home 用户的主目录,在linux中,每个用户都有一个自己的目录,一般是使用用户的账号来命名的。
  • /lib 存放一些动态链接共享库,其作用类似于windows中的ddl文件。 几乎所有的应用程序都需要使用到这些共享库。
  • /lost+found 这个目录一般是空的,在系统非法关机之后,这里存放了一些文件。
  • /meida linux会自动识别一些设备,例如u盘、光驱等,识别后,linux会把识别的设备挂在到这个目录下。
  • /mnt 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂在到/mnt/上,然后进入该目录就可以查看光驱里的内容了。
  • /opt 这时给主机额外安装软件所摆放的目录。 
  • /proc 这是一个虚拟的目录,它是系统内存的映射。
  • /root 是系统管理员的目录。
  • /sbin 其中s是super user的意思,这里存放的是系统管理员使用的系统管理程序。
  • /src 该目录存放一些服务器启动之后需要提取的数据。
  • /sys 这时linux2.6内核一个很大的变化。 它是内核设备树的一个直观反映。
  • 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。 
  • /tmp 这个目录是用来存放一些临时文件的。
  • /user 用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
  • /user/bin 是系统用户使用的应用程序。
  • /user/sbin 是超级用户使用的比较高级的管理程序和系统守护程序。
  • /usr/src 内核源代码默认的放置目录。
  • /var 这个目录中存放着不断扩充着的东西,我们习惯将那些经常被修改的目录存放在这个目录下,包括各种日志文件。

 

 

linux远程登录

  linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房中操作你的linux服务器

  这时我们就需要通过远程登录到linux服务器来管理维护系统。 

  linux系统是通过ssh服务来实现的远程登录功能,ssh服务端口号为22。

  

 

Linux文件基本属性

  Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定

   在linux中,我们可以通过ll或者ls -l来显示一个文件的属性以及文件所属的用户和组,如下:



[root@www /]# ls -l
total 64
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
……


  实例中,bin文件的第一个属性用"d"表示。"d"在Linux中代表该文件是一个目录文件。

  

在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为[ d ]则是目录 (directory)
  • 当为[ - ]则是文件;
  • 若是[ l ]则表示为链接文档(link file);
  • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

  每个文件的属性由左边第一部分的10个字符来确定(如下图)。

Linux && shell_用户账号_03

   从做到右使用0-9这些数字来表示。   

   第0为确定文件类型,第1-3位确定属主(该文件的拥有者)拥有该文件的权限。 

   第4-6确定属组(所有者的同组用户)拥有该文件的权限。 

   第7-9确定的是其他用户拥有该文件的权限。

  其中rwx分别为读、写、执行,而-表示相应位置没有权限。

  

 

linux中文件的属主和属组:

  对于文件来说, 他都有一个特定的所有者,也就是对该文件具有所有权的用户。

  同时,在linux系统中,用户是按照组来分类的,一个用于属于一个或者多个组。

  所以,文件所有者以外的用户可以分为同组用户或者其他用户。 

  因此,linux系统按照文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。



[root@www /]# ls -l
total 64
drwxr-xr-x 2 root root 4096 Feb 15 14:46 cron
drwxr-xr-x 3 mysql mysql 4096 Apr 21 2014 mysql
……


  对于以上实例,可以看出: sysql文件是一个目录文件,属组和属主都是mysql,属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限; 其他用户也有可读和可执行的权限。

  对于root用户来说,一般情况下,文件的权限对其不起作用。

  

  

更改文属性: 

(1)chgrp: 更改文件属组



chgrp [-R] 属组名文件名


参数选项

  • -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改

 

(2)chown:更改文件属主,也可以同时更改文件属组。 



chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名


 

(3)chmod:更改文件9个属性

  Linux文件属性有两种设置方法,一种是数字,一种是符号。

  Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。

  先复习一下刚刚上面提到的数据:文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

  • r:4
  • w:2
  • x:1

  

linux文件与目录管理

  我们知道linux的目录结构是树状结构,最顶级的目录为根目录/。

  其他目录通过挂载可以将他们添加到树中,通过解除挂在可以移除他们。

  • 绝对路径: 写法,由根目录/写起,例如: /user/share/doc 这个目录。 
  • 相对路径: 写法,不是由/写起,例如由/user/share/doc要到/user/share/man底下时,可以写成: cd ./man 这就是相对路径的写法了。 

 

处理目录的常用命令

  • ls: 列出目录。
  • cd: 切换目录。
  • pwd: 显示当前目录。
  • mkdir: 创建一个新的目录。
  • rmdir: 删除一个空的目录。
  • cp: 复制文件或者目录。
  • rm: 移除文件或者目录。

 

ls(列出目录):

    在linux系统中,ls命令可能是最常被运行的。如下;



[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称
[root@www ~]# ls [--color={never,auto,always}] 目录名称
[root@www ~]# ls [--full-time] 目录名称


选项与参数:

  • -a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
  • -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
  • -l :长数据串列出,包含文件的属性与权限等等数据;(常用)

将目录下的所有文件列出来(含属性与隐藏档)



[root@www ~]# ls -al ~


 

cd (切换目录)

cd是Change Directory的缩写,这是用来变换工作目录的命令。

 

pwd (显示目前所在的目录)

pwd是Print Working Directory的缩写,也就是显示目前所在目录的命令。

 

mkdir (创建新目录)

如果想要创建新的目录的话,那么就使用mkdir (make directory)吧。



mkdir [-mp] 目录名称


选项与参数:

  • -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
  • -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!

 

rmdir (删除空的目录)

语法:



rmdir [-p] 目录名称


选项与参数:

  • -p :连同上一级『空的』目录也一起删除

    

cp (复制文件或目录)

cp 即拷贝文件和目录。



[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory


选项与参数:

  • -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
  • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
  • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
  • -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
  • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;
  • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
  • -r:递归持续复制,用於目录的复制行为;(常用)
  • -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
  • -u:若 destination 比 source 旧才升级 destination !

 

 

rm (移除文件或目录)

语法:



rm [-fir] 文件或目录


选项与参数:

  • -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
  • -i :互动模式,在删除前会询问使用者是否动作
  • -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!

 

mv (移动文件与目录,或修改名称)



[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... directory


 

  • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
  • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
  • -u :若目标文件已经存在,且 source 比较新,才会升级 (update)

 

 

 

linux文件内容查看

Linux系统中使用以下命令来查看文件的内容:

  • cat  由第一行开始显示文件内容
  • tac  从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
  • nl   显示的时候,顺道输出行号!
  • more 一页一页的显示文件内容
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
  • head 只看头几行
  • tail 只看尾巴几行

 

cat 

由第一行开始显示文件内容,语法:



cat [-AbEnTv]


选项与参数:

  • -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
  • -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
  • -E :将结尾的断行字节 $ 显示出来;
  • -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
  • -T :将 [tab] 按键以 ^I 显示出来;
  • -v :列出一些看不出来的特殊字符

 

tac

tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如:

 

nl

显示行号



nl [-bnw] 文件


 

选项与参数:

  • -b :指定行号指定的方式,主要有两种:
    -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
    -b t :如果有空行,空的那一行不要列出行号(默认值);
  • -n :列出行号表示的方法,主要有三种:
    -n ln :行号在萤幕的最左方显示;
    -n rn :行号在自己栏位的最右方显示,且不加 0 ;
    -n rz :行号在自己栏位的最右方显示,且加 0 ;
  • -w :行号栏位的占用的位数。

 

more

一页一页翻动

 

less

一页一页翻动,以下实例输出/etc/man.config文件的内容:

 

 

head

取出文件前面几行

 

tail

取出文件后面几行

 

Linux 用户和用户组管理

  Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

  实现用户账号的管理,要完成的工作主要有如下几个方面:

  • 用户账号的添加、删除与修改。
  • 用户口令的管理。
  • 用户组的管理。

 

一、Linux系统用户账号的管理

  用户账号的管理工作主要涉及到用户账号的添加、修改和删除。

  添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。

   

1、添加新的用户账号使用useradd命令,其语法如下:



useradd 选项 用户名


参数说明:

  • 选项:
  • -c comment 指定一段注释性描述。
  • -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
  • -g 用户组 指定用户所属的用户组
  • -G 用户组,用户组 指定用户所属的附加组。
  • -s Shell文件 指定用户的登录Shell
  • -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
  • 用户名:
    指定新账号的登录名。

 

实例



# useradd –d /usr/sam -m sam


此命令创建了一个用户sam其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录)。

 

删除账号:

如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。

删除一个已有的用户账号使用​​userdel​​命令,其格式如下:



userdel 选项 用户名


常用的选项是-r,它的作用是把用户的主目录一起删除。

 



# userdel sam


此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。

 

修改帐号

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

修改已有用户的信息使用​​usermod​​命令,其格式如下:



usermod 选项 用户名


常用的选项包括​​-c, -d, -m, -g, -G, -s, -u以及-o等​​,这些选项的意义与​​useradd​​命令中的选项一样,可以为用户指定新的资源值。

如:



# usermod -s /bin/ksh -d /home/z –g developer sam


此命令将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。

 

用户口令的管理

用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。

指定和修改用户口令的Shell命令是​​passwd​​。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:



passwd 选项 用户名


可使用的选项:

  • -l 锁定口令,即禁用账号。
  • -u 口令解锁。
  • -d 使账号无口令。
  • -f 强迫用户下次登录时修改口令。

例如,假设当前用户是sam,则下面的命令修改该用户自己的口令:



$ passwd 
Old password:******
New password:*******
Re-enter new password:*******


 

Linux系统用户组的管理

  每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

  用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

1、增加一个新的用户组使用groupadd命令。其格式如下:



groupadd 选项 用户组


可以使用的选项有:

  • -g GID 指定新用户组的组标识号(GID)
  • -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。



# groupadd group1


  此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。

 

2、如果要删除一个已有的用户组,使用groupdel命令,其格式如下:



groupdel 用户组



# groupdel group1


此命令从系统中删除组group1。

 

3、修改用户组的属性使用groupmod命令。其语法如下:



groupmod 选项 用户组


常用的选项有:

  • -g GID 为用户组指定新的组标识号。
  • -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
  • -n新用户组 将用户组的名字改为新名字

 

4、如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。

用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。例如:



$ newgrp root


这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。

 

 

linux磁盘管理

  linux磁盘管理的好坏直接关系到了整个系统的性能问题,我们认为linux磁盘管理常用的三个命令是: df、du以及fdisk。 

  • df:列出文件系统的整体磁盘使用量
  • du:检查磁盘空间使用量
  • fdisk:用于磁盘分区

df

df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法:



df [-ahikHTm] [目录或文件名]


选项与参数:

  • -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
  • -k :以 KBytes 的容量显示各文件系统;
  • -m :以 MBytes 的容量显示各文件系统;
  • -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
  • -H :以 M=1000K 取代 M=1024K 的进位方式;
  • -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
  • -i :不用硬盘容量,而以 inode 的数量来显示

 

du

Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的,这里介绍Linux du命令。

语法:

du [-ahskm] 文件或目录名称


  • -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
  • -h :以人们较易读的容量格式 (G/M) 显示;
  • -s :列出总量而已,而不列出每个各别的目录占用容量;
  • -S :不包括子目录下的总计,与 -s 有点差别。
  • -k :以 KBytes 列出容量显示;
  • -m :以 MBytes 列出容量显示;

 

 

fdisk

fdisk 是 Linux 的磁盘分区表操作工具。



fdisk [-l] 装置名称


选项与参数:

  • -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。

 

磁盘格式化

磁盘分割完毕后自然就是要进行文件系统的格式化,格式化的命令非常的简单,使用 ​​mkfs​​(make filesystem) 命令。

 

磁盘检验

fsck(file system check)用来检查和维护不一致的文件系统。

若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。



fsck [-t 文件系统] [-ACay] 装置名称


选项与参数:

  • -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
  • -s : 依序一个一个地执行 fsck 的指令来检查
  • -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查
  • -C : 显示完整的检查进度
  • -d : 打印出 e2fsck 的 debug 结果
  • -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
  • -R : 同时有 -A 条件时,省略 / 不检查
  • -V : 详细显示模式
  • -a : 如果检查有错则自动修复
  • -r : 如果检查有错则由使用者回答是否修复
  • -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。

 

磁盘挂载与卸除

Linux 的磁盘挂载使用 ​​mount​​ 命令,卸载使用 ​​umount​​ 命令。

磁盘挂载语法:



mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n]  装置文件名  挂载点


 

Linux vi/vim

  所有的unix Like系统都会内建 vi 文书编辑器, 其他的文书编辑器不一定存在。 

  但是目前我们使用比较多的是vim编辑器。 

  vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。 

  相关文章:​​史上最全vim快捷键位图 --- 入门到进阶​

Linux && shell_linux_04

  

    

vi/vim共分为了三种模式:命令模式插入模式底线命令模式

 

命令模式: 我们刚刚启动了vi,就会进入命令模式,输入的i、x、:这些都是命令。 

输入模式: 在命令模式下按下了i就进入了输入模式, 可以使用del、方向键、Home、page up、esc等按键 。

底线命令模式: 按下了:就会进入底线命令模式。q为退出程序, w为保存文件。

 

 

 









 

shell教程

      shell使用c语言编写的一个应用程序, 它是使用linux的桥梁。 这个程序为用户提供了一个界面,用户通过这个界面可以访问操作系统内核的服务。 

   比如 windows explorer 就是一个典型的图形界面shell。 

  

shell脚本

  这是一种为shell编写的脚本程序,业界所说的shell,一般都是shell脚本。 

  

shell环境

  shell编程和java、php编程一样,只要有个能编写代码的文本编辑器和一个能解释执行的脚本编辑器就可以了。 linux的shell种类很多,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
  • ……

  我们关注的是 Bash, 也就是 Bourne Again Shell, 由于免费和易用, bash在日常工作中被广泛使用 。  同时, Bash也是大多数的linux系统默认的shell. '

  

 

第一个shell脚本

  打开文本编辑器,然后创建一个test.sh,扩展名为 sh (sh代表shell)扩展名并不影响脚本执行,见名知意就好了 。 如果用php写shell脚本,那么使用php作为扩展名即可。

  输入一些代码,第一行一般是这样的:



#!/bin/bash
echo "Hello World !"


  

  #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell

  echo命令用于向窗口输出文本。 

  

运行shell脚本的方法有两种: 

1、 作为可执行程序: 

  将上面的代码保存为 test.sh, 并且cd到相应目录: 



chmod +x ./test.sh  #使脚本具有执行权限
./test.sh #执行脚本


  注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

 

  

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:



/bin/sh test.sh
/bin/php test.php


这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

 

shell变量

    

  注意:定义变量的时候,变量名不加美元符号($,php语言是需要的),如:



your_name="runoob.com"


  注意,变量名和等号直接是不能有空格的,这个可能和你之前熟悉的所有的编程语言都是不一样的, 同时,变量名必须遵从下面的规则:

  • 首个字符必须为字母(a-z,A-Z)。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

 

使用变量

  使用一个定义过的变量,只要在变量名前面添加美元符号即可。



your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name


  如上所示,即可使用定义过的变量。

 

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

下面的例子尝试更改只读变量,结果报错

#!/bin/bash
myUrl="http://www.w3cschool.cc"
readonly myUrl
myUrl="http://www.runoob.com"


运行脚本,结果如下:

/bin/sh: NAME: This variable is read only.


 

删除变量

  使用unset命令就可以删除变量了,语法如下:



unset variable_name


  变量被删除后不能再次使用。unset 命令不能删除只读变量

 

变量类型

运行shell时,会同时存在三种变量:

  • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

 

 

shell注释

  

以"#"开头的行就是注释,会被解释器忽略。

sh里没有多行注释,只能每一行加一个#号。只能像这样:

 



#--------------------------------------------
# 这是一个注释
# author:菜鸟教程
# site:www.runoob.com
# slogan:学的不仅是技术,更是梦想!
#--------------------------------------------
##### 用户配置区 开始 #####
#
#
# 这里可以添加脚本描述信息
#
#
##### 用户配置区 结束 #####