码迷,mamicode.com
首页 > 系统相关 > 详细

(1)第一章:shell基本特性

时间:2015-11-25 10:57:30      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

1.1、打开终端后,就会出现一个提示符,其形式通常如下:

username@hostname$

或者是:

root@hostname#

要么就简单地以$或#表示。

($表示普通用户,#表示超级用户(root user))。

1.2、linux下的所有脚本语言,都以#!后跟解释权路径这样一个被称为shebang的特殊行作为起始的。shell脚本常以#!/bin/bash起始。

有两种运行脚本的方式:一种是将脚本作为sh命令的参数,另一种是将脚本作为具有执行权限的可执行文件。

将脚本作为参数时运行方式如下:

$sh a.sh#假设脚本在当前目录下,此时第一行就没用了

 

或者

$sh /home/a.sh #使用完整路径

 

赋予脚本权限:

$chod a+x acript.ah

 

执行:

$ ./a.sh # ./ 表示当前目录,也可以使用绝对路径

 

执行过程:shell程序读取首行,查看shebang行是否为#!/bin/bash。它会识别/bin/bash,并在内部以$  /bin/bash  a.sh这样的形式执行脚本。

1.3、当一个终端被打开时会执行一组初始化指令,这组指令位于home目录下的.bashrc文件(~/.bashrc)。

~./bash_history脚本用于保存用户运行过 的命令。~是一种简写,代表用户的home目录 的路径。

命令是通过换行符来分隔的:$  cmd1;cmd2

等同于 $cmd1

      cmd2

注释以#起始,一直延续到行尾

2、终端打印

2.1、echo

单引号、双引号、不带引号都可以完成同样的任务:

$ echo  “welcome to bash”

$ echo  ‘welcome to bash’

$  echo   welcome to bash

这三种方法看起来相似,但各有一些特殊用途和副作用。

三种方法的副作用如下:

  • 不带引号时,没法在文本中使用分号(;)
  • 使用双引号时,双引号中的一切文本都将被原样打印出来
  • 使用单引号时,Bash不会对单引号中的变量求值,而只是照原样显示。如 $  echo  ‘$var’将会返回$var,而 $ echo  $var 或使用双引号将会根据变量$var定义与否,返回其值。

该命令参数很多,必须用一篇文章 才能叙述的完。

2.2、printf

和c语言的printf完全一样。

补充:

echo和printf中的标志(如-e、-n等)应该出现在命令行内任何字符串之前,否则bash会将其视为另一个字符串。

在echo中转义换行符

默认情况下,echo会将一个换行符追加到文本尾部,使用-n标志可以可以忽略结尾换行符。

彩色打印

彩色文本:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,杨红=35,青色=36,白色=37

如:echo  -e  “\e[1;31m  This  is  red  text  \e[0m”

\e[a;31m 将颜色设为红色,\e[0m将颜色置回

彩色背景:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,杨红=45,青色=46,白色=47

如:echo  -e  “\e[1;42m  green background  \e [0m”

3、变量与环境变量

脚本语言中的变量通常是动态类型的,不需预先声明类型,直接赋值即可。bash中的变量皆为字符串。一些特殊变量会被shell和操作系统用来存储一些特别的值,即环境变量。

env命令:查看与每个进程运行时 的环境变量:

cat /proc/#PID/environ #其中,将PID设成相关进程的ID (PID总是一个整数)。

ID获取:假设一个叫做gedit的程序正在运行。可以使用pgrep命令来获取gedit的进程ID:

$ pgrep gedit 12501

 

此时使用

$ cat /proc/12501/environ

命令将会返回一个包含环境变量名及其对应变量值的列表。每一个变量以name=value的形式表述,由null字符(\0)分隔,将\0用\n替换,既可以在每一行显示一对name=value。替换用tr命令实现:

$ cat /proc/12501/environ | tr \0 \n

4、变量操作

赋值:var=value

如果值中包含任何空白字符(如空格),即必须使用单引号或双引号。

注意:var0=value不等于var = value,前者是赋值操作,后者是相等操作。

在变量名之前加上 $ 前缀就可以打印出变量 的内容:

var="jiang" echo $var echo ${var}

5、环境变量

export命令用来设置环境变量:

$ export PATH="$PATH:/home/user/bin"

#也可以使用
$  PATH
="$PATH:/home/user/bin"

$  export  PATH

从当前shell脚本执行的任何程序都会继承这个变量。我们还可以按照自己的需要,在执行的应用程序或shell脚本中到处特定的变量。默认情况下有很多变量可供使用。

PATH就是其中之一:

$ echo $PATH

 

在给出所要执行的命令后,shell自动在PATH环境变量所包含的目录列表中(各目录路径之间以冒号分隔)查找对应的可执行文件。$PATH通常定义在/etc/environment或/etc/profile或~/.bashrc

还有一些众所周知的环境变量:HOME、PWD、USER、UID、SHELL

6、一些技巧

6.1获取字符串长度 : length=${#var}

$ var=12345678901234567890

$  echo
${#var} 20

6.2、识别当前shell版本

$ echo $SHELL /bin/bash $ echo $0

bash

6.3、检查是否为超级用户

UID是一个重要的环境变量,可以用于检查当前脚本是以超级用户还是以普通用户身份运行的:

if [ $UID -ne 0 ] ; then echo Non root user . Please run as root. else echo "Root user" fi#root用户的UID是0

6.4、修改Bash提示字符串

可以利用 PS1 环境变量来定制提示文本。默认shell提示文本是在文件 ~/.bashrc 的某一行设置的。

# 找出设置PS1的哪一行 $ cat ~/.bashrc | grep PS1 PS1=${debian_chroot:+($debian_chroot)}\u@\h:\w\$

#设置字符串,可以输入:
$  PS1
="PROMPT>"

 

(1)第一章:shell基本特性

标签:

原文地址:http://www.cnblogs.com/xdjyw/p/4993816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!