熟识Shell

简介

类Unix操作系统设计令人惊叹,即使是在今天,它们的框架仍旧是最佳设计之一。这种构架最重要的一个特性就是命令行界面或Shell。Shell环境可以使用户与操作系统的核心功能进行交互。我们所说的编写脚本通常是使用某种基于解释器的编程语言。我们能将一系列需要执行的命令写入文件中,通过Shell来执行。

以Bash举例

打开终端的时候会有提示符

username@hostname$:

root@hostname#:

用$是普通用户,#则是管理员用户,在Linux中,root是最高权限用户;

一般使用“bash 脚本文件名”来运行脚本文件,当然也可以将脚本文件变成可执行文件直接运行

要是有需要的话,可以利用shebang来实现脚本的独立运行。对此必须设置脚本的可执行权限,这样它就可以使用位于#!之后的解释器路径来运行了。就像这样:
 $ chmod a+x script.sh
该命令赋予所有用户script.sh文件的可执行权限。这个脚本能以下列方式执行:
$ ./script.sh #./表示当前目录
或者
$ /home/path/script.sh #使用脚本的完整路径
内核会读取脚本的首行并注意到shebang为#!/bin/bash。它识别出/bin/bash并在内部像这样执行该脚本:
$ /bin/bash script.sh

每个命令可以以“;”来分隔,注释可以用#;

终端打印

命令echo或者使用C语言的printf
通常是使用echo,在单纯的字符串情况下,可以直接输出、加‘’或者“”,这些都可以打印出来;
在某些情况下这些方式是有区别的,特殊符号例如“!”在“双引号”中是打印不出来的:

echo hello world !(这样直接打印可以显示)

或者

echo "hello world \!(前面加上\转义符)

使用不带引号的echo时,没法在所要显示的文本中使用分号(;),因为分号在Bash shell
中被用作命令定界符。
以echo hello;hello为例,echo hello被视为一个命令,第二个hello则被视为另一个命令。

echo会在文末自动添加换行符,printf需要手动添加
example:

printf "%-5s %-10s %-4s\n" No Name Mark
printf "%-5s %-10s %-4.2f\n" 1 Ardee 80.3456
printf "%-5s %-10s %-4.2f\n" 2 James 90.9989
printf "%-5s %-10s %-4.2f\n" 3 Kobe 77.564

可以打印表格

打印补充内容
转义符

如果需要使用转义序列,则采用echo –e "包含转义序列的字符串"这种形式

echo -e "1\t2\t3"
输出:1 2 3

彩色打印

每种颜色都有对应的颜色码。比如:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37。

echo -e "\e[1;31m This is red text \e[0m"

要设置彩色背景,经常使用的颜色码是:重置=0,黑色=40,红色=41,绿色=42,黄色=43, 蓝色=44,洋红=45,青色=46,白色=47。

echo -e "\e[1;42m Green Background \e[0m"

变量

变量可以通过以下方式进行赋值:
var=value

var是变量名,value是赋给变量的值。如果value不包含任何空白字符(例如空格),那么它就不需要使用引号进行引用,否则必须使用单引号或双引号。
注意,var = value不同于var=value。把var=value写成var = value是一个常见的错误, 但前者是赋值操作,后者则是相等操作。

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

var="value" #给变量var赋值
echo $var
或者
echo ${var}

example:

#!/bin/bash
#文件名:variables.sh
fruit=apple count=5
echo "We have $count ${fruit}(s)"

补充
  • 获得字符串长度
    可以用下面的方法获得变量值的长度:

length=${#var}

  • 识别当前所使用的shell
    可以用下面的方法获知当前使用的是哪种shell:

echo $SHELL

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

If [ $UID -ne 0 ]; then
echo Non root user. Please run as root.
else
echo Root user
fi

你可能感兴趣的:(熟识Shell)