shlong入门介绍说明

图标

豆瓜

豆瓜网

豆瓜网专栏

豆瓜 图标 2021-02-23 09:56:00

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_DIRcat /dev/null > messagescat /dev/null > wtmpecho "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.shsource 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 $techo $((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=5if [ $a -lt 10 ] ; then

echo $aelse

echo 10fi

复制代码

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

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

ii. 数组元素

#!/bin/bash

array=(1 2 3 4 5)

array[3]=10echo ${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.targzip $archive.tarecho "Directory $PWD backed up in archive file \"$archive.tar.gz\"."exit 0

复制代码

20). ~ 波浪号

i. 用户主目录

6. 变量替换

echo $HOMEecho "$HOME"echo '$HOME'

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

7. 变量赋值 =

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

8. 特殊变量

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

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

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

$*, $@


本文由豆瓜网专栏作家 豆瓜 投稿发布,并经过豆瓜网编辑审核。

转载此文章须经作者同意,并附上出处(豆瓜网)及本页链接。

若稿件文字、图片、视频等内容侵犯了您的权益,请联系本站进行 投诉处理

相关搜索

shlong
图标 图标

豆瓜

豆瓜网

豆瓜网专栏

全部评论

豆瓜

豆瓜网

豆瓜网专栏

  • 加盟艾思德妮羽绒服品牌要多少钱
  • 最好用的国货护肤品有哪些
  • 投资服装加盟店可以赚钱吗
  • 加盟东北红高粱酒要多少钱以及优势是什么
  • 浅谈如何加盟快递代理点
  • 我来说两句