Shell脚本基础知识

当启动shell时,它一开始会执行一组命令来定义诸如提示文本、颜色,环境变量等各类设置。这组命令来自位于用户主目录中的脚本文件~/.bashrc(对于登录shell则是~/.bash_profile)。Bash还维护了一个历史记录文件~/.bash_history,用于保存用户运行过的命令。

在Bash中,每个命令或是命令序列是通过使用分号或换行符来分隔的。比如:
$ cmd1 ; cmd2
它等同于:
$ cmd1

$ cmd2

1.shell的提示模式:

用户名@主机名

username@hostname$: 或者 root@hostname #,其中的$表示普通用户,#表示管理员用户root

2. shell脚本

第一行:#!/bin/bash,/bin/bash是Bash的解释器命令路径

3. 执行shell脚本

有两种运行脚本的方式。一种是将脚本作为bash的命令行参数,另一种是授予脚本执行权限,将其变为可执行文件。

3.1    bash    /xx/xx.sh

3.2    chmod a+x script.sh       ./script.sh #./表示当前目录

内核会读取脚本的首行并注意到shebang为#!/bin/bash。它识别出/bin/bash并在内部像这样执行该脚本:

$ /bin/bash script.sh

4. echo命令

echo "hello world"

echo 'hello world'  //变量替换在单引号中无效

使用单引号时,变量不会被扩展(expand),将依照原样显示。这意味着:

$ echo '$var' will print $var

在默认情况下,echo会将一个换行符追加到输出文本的尾部。可以使用选项-n来忽略结尾的换行符。echo同样接受双引号字符串内的转义序列作为参数。如果需要使用转义序列,则采用echo –e "包含转义序列的字符串"这种形式。例如:
echo -e  "1\t2\t3"
1 2 3

5. printf.sh脚本

#!/bin/bash
#文件名: printf.sh
printf "%-5s %-10s %-4s\n" No Name Mark
printf "%-5s %-10s %-4.2f\n" 1 Sarath 80.3456
printf "%-5s %-10s %-4.2f\n" 2 James 90.9989
printf "%-5s %-10s %-4.2f\n" 3 Jeff 77.564
我们会得到如下格式化的输出:
No Name Mark
1 Sarath 80.35
2 James 91.00
3 Jeff 77.56

%s、%c、%d和%f都是格式替换符(format substitution character),其所对应的参数可以置于带引号的格式字符串之后。

%-5s指明了一个格式为左对齐且宽度为5的字符串替换(-表示左对齐)。如果不用-指定对齐方式,字符串就采用右对齐形式。宽度指定了保留给某个变量的字符数。对Name而言,保留宽度是10。因此,任何Name字段的内容都会被显示在10字符宽的保留区域内,如果内容不足10个字符,余下的则以空格符填充。对于浮点数,可以使用其他参数对小数部分进行舍入。对于Mark字段,将其格式化为%-4.2f,其中.2指定保留2个小数位。注意,在每行格式字符串后都有一个换行符(\n)。

5.变量和环境变量

可以使用env命令查看所有与终端相关的环境变量。对于进程来说,其运行时的环境变量可以使用下面的命令来查看:

cat /proc/$PID/environ

获得某个程序的pid:pidof sshd 或者pgrep sshd

$ cat /proc/12501/environ

GDM_KEYBOARD_LAYOUT=usGNOME_KEYRING_PID=1560USER=slynuxHOME=/home/slynux

为了好看,可以:cat /proc/12501/environ | tr  '\0'  '\n'      //彼此之间由null字符(\0)分隔

环境变量是未在当前进程中定义,而从父进程中继承而来的变量。例如环境变量HTTP_PROXY,它定义了互联网连接应该使用哪个代理服务器。该环境变量通常被设置成:

HTTP_PROXY=192.168.1.23:3128

export HTTP_PROXY        //export命令用来设置环境变量

修改环境变量:

export PATH=/opt/myapp/bin:$PATH
export LD_LIBRARY_PATH=/opt/myapp/lib;$LD_LIBRARY_PATH

6. 修改Bash提示字符串(username@hostname:~$)
当我们打开终端或是运行shell时,会看到类似于user@hostname:/home/$的提示字符串。
不同GNU/Linux发布版中的提示及颜色略有不同。我们可以利用PS1环境变量来定制提示文本。
默认的shell提示文本是在文件~/.bashrc中的某一行设置的。
 可以使用如下命令列出设置变量PS1的那一行:
$ cat ~/.bashrc | grep PS1
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
 如果要设置一个定制的提示字符串,可以输入:
slynux@localhost: ~$ PS1="PROMPT>"
PROMPT> Type commands here #提示字符串已经改变
 我们可以利用类似\e[1;31的特定转义序列来设置彩色的提示字符串(参考1.2节的内
容)。
还有一些特殊的字符可以扩展成系统参数。例如:\u可以扩展为用户名,\h可以扩展为主
机名,而\w可以扩展为当前工作目录。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值