`
rensanning
  • 浏览: 3549444 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38168
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607363
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682405
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89401
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401904
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69712
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91744
社区版块
存档分类
最新评论

Bash简要入门

 
阅读更多
(一)Shell 和 Bash

Bash(Bourne-Again SHell)Linux系统默认的命令解释器。
[root@localhost ~]# file -h /bin/sh
/bin/sh: symbolic link to `bash'
[root@localhost ~]# echo $SHELL
/bin/bash


Stephen Bourne创建了Bourne Shell(即sh),之后Brian Fox 开发了 Bash,它是Bourne Shell的扩展。除过Bash外还有很多Shell解释器:Korn Shell (ksh) 、C Shell (csh) 、Tenex C Shell (tcsh) 、Almquist (ash)、Bourne Again Shell (bash)、Z shell (zsh)等。

(二)Shell分类

(1) 交互式Interactive Shell
一般打开terminal后自动进入交互式sh。可以输入/编辑命令然后回车执行,Linux采用Bash作为默认的命令解释器。
[root@localhost ~]# echo "Hello World"
Hello World

echo就是Bash的内建命令,它会输出信息并换行。

(2) 非交互式Non-Interactive Shell
如果shell不需要人为的输入任何东西时,可以创建脚本文件,文件里可以用任何的命令。
[root@localhost ~]# vi hello-world.sh
#!/bin/bash
echo "Hello World"
[root@localhost ~]# chmod +x hello-world.sh
[root@localhost ~]# ./hello-world.sh
Hello World


执行脚本文件的方法:
# ./hello-world.sh (一般是这种)
# /root/hello-world.sh
# /bin/bash hello-world.sh
# bash hello-world.sh
# sh hello-world.sh


Shell脚本文件的第一行注明了用什么解释器来解释这个脚本。
比如:
#!/bin/csh
#!/bin/bash


在很多系统里/bin/bash是不存在的,比如变成了/usr/local/bin/bash,为了避免路径的问题可以使用环境变量:
#!/usr/bin/env bash


Shell脚本文件一般后缀为.sh(Linux里文件扩展名没有任何意义)

Shell脚本文件如果是在Window下编写,需要注意修改文件内部的换行符 dos2unix hello-world.sh
[root@localhost ~]# ./test-win-sh.sh
-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or director
[root@localhost ~]# dos2unix test-win-sh.sh
dos2unix: converting file test-win-sh.sh to UNIX format ...
[root@localhost ~]# ./test-win-sh.sh
Hello World2


(三)变量

#!/usr/bin/env bash
# 定义变量。
# 注意等号两边不能有空格,不然会把变量名当做命令执行。
whom_variable="rensanning"
# 打印输出变量值。$+变量名。双引号里的变量会被解析,单引号会原样输出。
printf "Hello, $whom_variable\n"

*** 注释以#号开头,但第一行的#!不是注释,它代表bash解释器的路径。

命令行参数
  • $#: 参数个数
  • $@: 所有参数数组
  • $0: 当前脚本
  • $1: 第一个参数 $2:第二个参数 以此类推
  • ${10}: 第10个参数开始需要大括号
  • $?: 前一个命令的返回值


内置变量
  • $HOME : 用户目录
  • $PWD : 当前目录
  • $PATH : 环境变量PATH


(四)引号

双引号"..." : 解析$、\、`的值
单引号'...' : 包含空格的字符串。(两个单引号之间不能使用单引号)
反引号`...` : 作为命令执行

(五)括号

(1) 小括号
( command1; command2 )             Command group executed within a subshell 
Array=(element1 element2 element3) Array initialization 
result=$(COMMAND)                  Command substitution, new style 
>(COMMAND)                         Process substitution 
<(COMMAND)                         Process substitution
(( var = 78 ))            Integer arithmetic  
var=$(( 20 + 5 ))         Integer arithmetic, with variable assignment
(( var++ ))               C-style variable increment  
(( var-- ))               C-style variable decrement  
(( var0 = var1<98?9:21 )) C-style ternary operation

(2) 中括号 (test 和 [] 等价)
if [ CONDITION ]    Test construct 
if [[ CONDITION ]]  Extended test construct   &&, ||, Pattern matching, 正規表現などが使える。
Array[1]=element1   Array initialization 
[a-z]               Range of characters within a Regular Expression
$[ expression ]     A non-standard & obsolete version of $(( expression )) [1]

(3) 大括号
${variable}                             Parameter substitution 
${!variable}                            Indirect variable reference 
${#str_var}                             Length of $str_var
{ command1; command2; . . . commandN; } Block of code 
{string1,string2,string3,...}           Brace expansion 
{a..z}                                  Extended brace expansion 
{}                                      Text replacement, after find and xargs

(六)数组

arr1=(1 2 3 4)
arr2=('first element' 'second element' 'third element')
arr2[0]='first'
arr2+=('fourth element' 'fifth element')
echo "${arr2[0]}"
arr3=("${arr1[@]}" "${arr2[@]}")
echo "${#arr3[@]}"


(七)控制语句

(1) IF语句

if [[ $1 -eq 1 ]]; then
  echo "1 was passed in the first parameter"
elif [[ $1 -gt 2 ]]; then
 echo "2 was not passed in the first parameter"
else
  echo "The first parameter was not 1 and is not more than 2."
fi

*** 注意 [  ] 前后必须有空格。
*** 如果then 和 if 在一行时需要分号,then在下一行的话就可以省略分号。

(2) FOR语句

for i in "${arr[@]}"; do
  echo "$i"
done


for ((i=0;i<${#arr[@]};i++)); do
  echo "${arr[$i]}"
done


break [n] # exit n levels of loop
continue [n] # go to next iteration of loop n up

(3) WHILE语句

i=0
while [ $i -lt ${#arr[@]} ]; do
  echo "${arr[$i]}"
  i=$(expr $i + 1)
done


i=0
while (( $i < ${#arr[@]} )); do
  echo "${arr[$i]}"
  ((i++))
done


(4) CASE语句

case "$BASH_VERSION" in
  [34]*)
    echo {1..4}
    ;;
  *)
    seq -s" " 1 4
esac


(八)函数

# 定义函数
function hello() {
  echo "hello, rensanning"
}
# 定义函数(省略function)
greet () {
  echo "Hello World!"
}
# 调用函数
greet


# 本地变量
greet() {
  var="Global"
  local name="rensanning"
  echo "Hello, $name"
}
greet
echo $var
echo $name


# 函数参数
greet() {
  echo "Hello, $1"
}
greet "rensanning"


# 返回值
fun() {
 local var="Sample value to be returned"
 echo "$var"
}
var="$(fun)"


参考:
https://linuxconfig.org/bash-scripting-tutorial-for-beginners
分享到:
评论

相关推荐

    Learning The Bash Shell, 3rd Edition by Cameron Newbam & Bill Rosenblatt

    - **简要介绍**:这是一本简单易懂、便于快速上手的学习资料。 - **电子书优势**:电子版形式方便读者进行快速搜索,帮助用户通过关键词或片段记忆迅速定位所需信息,大大提高了查阅效率。 #### 标签解析 - **Bash ...

    LinuxBash脚本编程大全.doc

    "(Sha-Bang)启动一个脚本,同时提供了一些基础练习,帮助读者快速入门。 2. **基本**:涵盖特殊字符、变量和参数的基本概念。讨论了变量替换、赋值、Bash变量的无类型特性,以及不同类型的特殊变量。此外,还介绍...

    JavaScript_对于那些想学习Bash的人.zip

    而`bash-handbook_master.zip`则可能是一个Bash编程的详细指南,包含了各种Bash命令、语法和最佳实践的详细解释,适合初学者入门或者经验丰富的开发者查阅参考。 对于JavaScript开发者来说,学习Bash可以提升他们的...

    ARM_Linux_C语言开发入门

    接下来简要介绍几个Linux操作系统中的常用命令: **1. ls 命令** - **使用方式**:`ls [-alrtAFR] [name]` - **说明**:显示指定工作目录下的内容,包括文件和子目录。 - **参数**: - `-a` 显示所有文件(包括以...

    UNIX 轻松入门(PDG)

    学习Bash shell的基本语法,包括变量、条件语句、循环结构以及函数定义。同时,教程会简要介绍C语言编程,因为C语言在UNIX系统开发中占有重要地位。你将学会如何在UNIX环境下编译、运行C程序,并理解一些基本的UNIX...

    mysql入门与帮助

    最后,文章还简要提及了如何将MySQL与Web服务器(如Apache)集成,这对于构建动态网站或应用至关重要。这通常涉及到配置Apache以识别MySQL数据源,以及编写脚本来从数据库中读取和写入数据。 通过以上详述的知识点...

    Linux培训资料(入门)

    这份“Linux培训资料(入门)”提供了一系列的教程,覆盖了从基础到进阶的重要概念,适合初学者逐步学习。 首先,让我们按照课程顺序简要了解一下每一讲的内容: 1. **Linux培训系列第一讲**:通常会介绍Linux的...

    Linux从入门 .zip

    15. **服务器应用**:简要介绍常见的Linux服务器角色,如Web服务器(Apache或Nginx)、数据库服务器(MySQL或PostgreSQL)、邮件服务器(Postfix或Exim)等。 通过学习以上这些内容,你将能够熟练地在Linux环境中...

    第1章、Linux快速入门_jarbaj_linux_

    我们还会接触bash,它是Linux默认的shell,学习条件语句、循环和函数的编写。 最后,我们会简要介绍Linux的进程管理和任务调度。理解ps、top、kill等命令,以及进程间通信(IPC)的概念,如管道、重定向和符号链接...

    gcc 编译命令的入门知识

    ### gcc编译命令的入门知识详解 在深入探讨gcc(GNU Compiler Collection)的使用方法之前,我们先简要介绍gcc是什么。GCC是GNU项目的一部分,它不仅是一个C和C++语言的编译器,还支持多种其他编程语言,如Ada、...

    Kubernetes 入门教程.docx

    ### Kubernetes (K8s) 入门教程知识点详解 #### 一、Kubernetes 架构概览 **Kubernetes**(通常简称为 **k8s**)是一种用于自动化部署、扩展和管理容器化应用程序的强大平台。它通过抽象硬件资源,为用户提供了...

    华为交换机配置教程汇总

    在深入了解具体的配置之前,我们先简要了解一下相关的基础知识: - **TELNET**:一种用于远程登录到其他计算机系统的标准协议。它允许用户通过网络连接到另一台计算机,并以命令行的方式进行交互。 - **访问控制列表...

    shell脚本入门-流程控制与应用技巧

    此外,还简要介绍了逻辑运算符在条件判断中的使用。 适合人群:适合初学者和具有一定Shell脚本基础的系统管理员、运维人员。 使用场景及目标:① 学习并掌握基本的Shell脚本流程控制结构;② 实现常见的任务自动化和...

    Linux操作系统下C语言编程入门.pdf

    ### Linux操作系统下C语言编程入门知识点汇总 #### 一、基础知识 ##### 1.1 源程序编译 在Linux环境下,C语言程序的编译通常使用的是GNU的`gcc`编译器。该编译器功能强大,支持多种语言的编译,并且能够生成高质量...

    Linux基础入门(已阅).pdf

    ### Linux基础入门知识点详解 #### 一、初识Linux——PC上Linux系统常规目录结构 在初识Linux的过程中,理解其目录结构对于更好地管理和使用Linux系统至关重要。以下是对Linux常见目录及其功能的详细介绍: 1. **...

    队列调度代码matlab-HPCJobExample:圣路易斯大学的高性能集群的简要概述

    入门 注意:16年8月30日之后,大多数新帐户将在Apex上创建。 Apex和Kepler之间的唯一主要区别是服务器路径。 终点站 在继续之前,您应该对导航命令行Linux环境感到相当满意。 如果您使用的是OSX或任何主要Linux发行...

    ucsf_pattern_library_old

    简要概述 一条线安装和设置 git clone git@bitbucket.org:phase2tech/ucsf-pattern-lab.git && cd ucsf-pattern-lab && bash scripts/setup-everything.sh 已经下载了 repo? 只需运行它即可让您拥有依赖项和帮助...

    rf+python+selenium自动化环境.docx

    #### 二、简要步骤 1. **安装 Python** 2. **安装 wxPython** 3. **使用 pip 安装 Robot Framework** 4. **使用 pip 安装 RIDE (Robot Framework IDE)** 5. **使用 pip 安装 Selenium2Library** 6. **完成基础环境...

Global site tag (gtag.js) - Google Analytics