Shell介绍与入门

1. 什么是Bash?

Bash是一个为GNU计划编写的Unix Shell, 也是许多Linux平台默认使用的Shell。

Shell是一个命令解释器,是介于操作系统内核和用户之间的一个绝缘层。同时, Shell也是一种解释性语言或脚本语言。它通过将系统调用、公共程序、工具和编译过的二进制程序"粘合"在一起来建立应用, 也称"胶水语言"。

2. 为什么学Bash?

对于任何想适当精通一些系统管理的人来说, 掌握Shell脚本的编写都是最基本的。

3. Bash脚本的运行方式:

# 使用shell来执行
$ sh script.sh
# 使用bash来执行
$ bash script.sh
# 赋予脚本的所有者该执行权限,允许该用户执行该脚本
$ chmod u+rx script.sh
# 执行命令,这将使用脚本第一行指定的shell来执行,如果指定shell不存在,将使用系统默认shell来执行
$  ./script.sh

4. 清空/var/log下的log文件:

#!/bin/bash

# 初始化一个变量
LOG_DIR=/var/log

cd $LOG_DIR

cat /dev/null > messages
cat /dev/null > wtmp

echo "Logs cleaned up."

exit

5. Bash中的特殊字符

1). # 注释

行首以"#"开头(除"#!"之外)的是注释。"#!", 用于指定当前脚本的解释器(使用绝对路径)

 #!/bin/bash

 echo "The # here dose not begin a comment."
 echo ‘The # here dose not begin a comment.‘
 echo The \# here dose not begin a comment.
 echo The # 这里开始一个注释

 echo ${PATH#*:}         # 参数替换,不是一个注释
 echo $(( 2#101011 ))    # 数制转换(使用二进制表示),不是一个注释

2). ; 命令分隔符

使用";"可以在同一行上写多个命令

echo hello; echo world

3). ;; case语句选项终止标记

使用";;"可以终止case选项

 #!/bin/bash

 varname=b

 case "$varname" in
     [a-z]) echo "alphabet"            ;;
     [0-9]) echo "number"            ;;
 esac

4). . 点号 等价于source命令

. script.sh
source script.sh

5). " 双引号

将转义字符视为普通字符, 允许Shell变量、Shell命令替换

6). ‘ 单引号

将转义字符都是为普通字符, 不允许Shell变量、Shell命令提换

7). / 斜线

文件名路径分隔符, 除法运算符

8). \ 反斜线

取消转义字符的特殊含义

9). ` 反冒号

命令替换

10). : 冒号

i. 空命令, 与Shell内建的命令true作用相同

 #!/bin/bash
 while :    # while true
 do
     echo "endless loop"
 done
 #!/bin/bash
 condition=5
 if condition>0
 then :   # 什么都不做,退出分支
 else
     echo "$condition"
 fi

ii. 变量扩展/字串替换

 $ : > file   # 文件“file”现在被清空了
 # 与 cat /dev/null > file 的作用相同
 # 然而,这并不会产生一个新的进程, 因为“:”是一个内建命令

11). ? 测试操作符

等价于C语言中的三元操作符

#!/bin/bash
a=10
(( t=a<2?8:9 ))
echo $t
echo $((a<2?8:9))

12). $ 变量替换

13). $( ) 命令替换

14). () 小括号

i. 命令组

在括号中的命令列表, 将会作为一个子Shell来执行(子Shell中的变量在父Shell中不可见):

#!/bin/bash
a = 123
( a=321; )
echo $a   # 123

ii. 初始化数组

#!/bin/bash
array=(1 2 3 4 5)
echo ${array}

15). {} 大括号

i. 文件名扩展

mv file{,.bak}

注意: 大括号中, 不允许有空白, 除非这个空白被引用或转义!

ii. 代码块

等同于与一个匿名函数, 但其内声明的变量, 在之后的代码仍可见

#!/bin/bash
a=123
{ a=321; }
echo $a  # 321

16). [] 中括号

i. 条件测试

[ 是Shell内建test命令的一部分, 不是/usr/bin/test中的外部命令的一个链接

#!/bin/bash
a=5
if [ $a -lt 10 ] ; then
    echo $a
else
    echo 10
fi

注意: [[ ]] 双中括号也可用于条件测试:

[[ 2 -lt 1 ]] || echo "false"
[[ 1 -lt 2 ]] && echo "true"

ii. 数组元素

#!/bin/bash
array=(1 2 3 4 5)
array[3]=10
echo ${array[3]}

17). <, > 尖括号

i. 重定向

> 标准输出重定向, &> 标准输出、标准错误输出重定向, >&2标准输出重定向到标准错误输出, >> 追加

18). | 竖线  管道

cat file | tr ‘a-z‘ ‘A-Z‘

19). - 破折号

i. 选项, 前缀

-eq, -le, -ge, ...

ii. 用于重定向stdin, stdout

#!/bin/bash

BACKUPFILE=backup-$(date +%m-%d-%Y)
# 在备份文件中嵌入时间.
archive=${1:-$BACKUPFILE}
#  如果在命令行中没有指定备份文件的文件名,
#+ 那么将默认使用"backup-MM-DD-YYYY.tar.gz".

tar cvf - `find . -mtime -1 -type f -print` > $archive.tar
gzip $archive.tar
echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."

exit 0

20). ~ 波浪号

i. 用户主目录

6. 变量替换

echo $HOME
echo "$HOME"
echo ‘$HOME‘

注: 如果没有引号, 将自动删除输出中多余的空白符!

7. 变量赋值 =

注意: 赋值操作前后不能有空白!

8. 特殊变量

i. 局部变量: 只在代码块或函数中可见

ii. 环境变量: Shell中定义的变量

iii. 位置参数: $0, $1, ... $9, ${10}, ${11},...

$*, [email protected]

时间: 2024-12-23 09:24:39

Shell介绍与入门的相关文章

8.17_Linux之bash shell脚本编程入门篇(三)之循环以及函数function的使用

bash shell脚本编程入门篇(三)之循环 什么是循环执行? 将某代码段重复运行多次 重复运行多少次: 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 相关命令:for, while, until,selet, for命令的使用 作用: 依次将列表中的元素赋值给"变量名"; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束 命令格式: for 变量名 in 列表; do 循环体(正常执行的执行命令) 语句1 语句2 语句3 ... done 列表生成方式: (

08 bash特性--shell脚本编程入门

shell脚本编程入门 编程语言介绍 变量 变量:就是给计算机内存中的一段空间命令,命令的这个空间就叫做变量,而再给这个空间放入值的过程,我们就叫做给变量赋值: bash下的变量的内部数据类型:(这是数据在内存中存放的格式,默认情况下,shell程序下一班都不会去申明数据类型,所以,我们的bash程序默认数据为字符类型) 字符型(string) 数值:整型(int).浮点型 布尔类型:真假 同时,脚本一般在执行的时候都会自动启动一个子shell进程,命令行中的启动的脚本会继承当前shell环境变

京峰Linux Shell编程从入门到精通

课程介绍:Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行. -------------------课程目录------------------- <Shell编程从入门到精通> ├1.linux下shell编程基础入门_(new).mp4├2.Shell编程之变量及LAMP导航菜单编写_(new).mp4├3.Shell编程之IF条件语句各种案例演练_(new).mp4├4.使用if条件语句编写MySQL备份脚本_(new).mp4

TFS(Team Foundation Server)介绍和入门

在本文的两个部分中,我将介绍Team Foundation Server的一些核心特征,重点介绍在本产品的日常应用中是怎样将这些特性结合在一起使用的. 作为一名软件开发者,在我的职业生涯中,我常常会用到支持软件开发过程的大量开发工具,如版本号控制工具.漏洞跟踪包.生成脚本语言.单元測试框架和需求分析工具等等.在.NET平台上,大量的支持工具可以非常好地独立工作,可是,为了使得各种工具之间都够互相协作,还是常常须要一些手动工作. 随着Visual Studio产品线中Team Foundation

Shell脚本快速入门

读研几年主要做的是控制领域的开发研究,做的硬件以及底层开发比较多.现在毕业了,开始发力软件领域,那么就让我从最简单基础的shell编程开始吧争取打扎实基础. 从程序员的角度来看,Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作.在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用.深入地了解和熟练地掌握Shell编程,是每一个L

8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向

8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向 # Linux shell 基础 # 8.1 shell 介绍 - 什么是shell 1. shell 是一个命令解释器,提供用户和机器之间的交互 2. 支持特定语法,比如逻辑判断.循环 3. 每个用户都可以有自己特定的shell 4. CentOS7 默认shell 为bash (Bourne Agin Shell) 5. 还有zsh.ksh等 ``` [[email protected]

8.15_Linux之bash shell脚本编程入门篇(二)以及文件查找和压缩的使用

bash shell脚本编程入门篇(二) read命令的使用 作用: 使用read来把输入值分配给一个或多个shell变量: -p指定要显示的提示 -t TIMEOUT read从标准输入中读取值,给每个单词分配一个变量,所有剩余单词都被分配给最后一个变量 EX.read -p "Enter a filename:" FILE 条件选择之if的使用 if的作用:选择执行(注意:if语句可嵌套) 单分支 if 判断条件;then 条件为真的分支代码 fi EX.单分支案例 双分支 if

Linux Shell介绍

1.什么是shell? shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行. 实际上,shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核. 2.shell类型 2.1 Bourne Shell(简称,sh) 首个重要的标准Unix Shell是1970年底在V7 Unix(AT&T第7版)中引入的,并且以它的创始科技部基础条件平台"国家气象网络计算应用节点建设"(2004DKA50730)资助者 Ste

Unix Shell 介绍

Unix Shell 介绍 http://www.kerneltravel.net/newbie/bsh_intro.htm Unix Shell 介绍 S. R. Bourne Bell 实验室 Murray Hill, New Jersey 07974 翻译:寒蝉退士 译者声明:译者对译文不做任何担保,译者对译文不拥有任何权利并且不负担任何责任和义务. 原文:http://cm.bell-labs.com/7thEdMan/shell.bun 摘要 shell 是提供到 UNIX 操作系统的