Bash简要入门

[b](一)Shell 和 Bash[/b]

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

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)等。

[b](二)Shell分类[/b]

[b](1) 交互式Interactive Shell[/b]
一般打开terminal后自动进入交互式sh。可以输入/编辑命令然后回车执行,Linux采用Bash作为默认的命令解释器。
[code="shell"]# echo "Hello World"
Hello World[/code]
echo就是Bash的内建命令,它会输出信息并换行。

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

执行脚本文件的方法:
# ./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
[code="shell"]# ./test-win-sh.sh
-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or director
# dos2unix test-win-sh.sh
dos2unix: converting file test-win-sh.sh to UNIX format ...
# ./test-win-sh.sh
Hello World2[/code]

[b](三)变量[/b]

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

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

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

[b]内置变量[/b]
[list]
[*]$HOME : 用户目录
[*]$PWD : 当前目录
[*]$PATH : 环境变量PATH
[/list]

[b](四)引号[/b]

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

[b](五)括号[/b]

[b](1) 小括号[/b]
( 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

[b](2) 中括号 (test 和 [] 等价)[/b]
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]

[b](3) 大括号[/b]
${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

[b](六)数组[/b]

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[@]}"


[b](七)控制语句[/b]

[b](1) IF语句[/b]

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在下一行的话就可以省略分号。

[b](2) FOR语句[/b]

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

[b](3) WHILE语句[/b]

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


[b](4) CASE语句[/b]

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


[b](八)函数[/b]

# 定义函数
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
### Git Bash 基础使用与基本操作 Git Bash 是一个在 Windows 系统上运行的命令行工具,它提供了类似于 Linux 的 shell 环境,使得用户可以在 Windows 上执行 Git 命令以及一些常见的 Unix 工具。对于初学者来说,掌握 Git Bash 的基础使用可以大大提升代码版本管理的效率。 #### 安装 Git Bash 安装 Git Bash 非常简单,只需前往 [Git for Windows](https://git-scm.com/download/win) 下载并按照提示进行安装即可。安装过程中有一个选项需要注意: - **Use Git from Git Bash only**:这个选项表示 Git 仅在 Git Bash 中可用,不会将 Git 命令添加到系统的 `PATH` 中。这样做的好处是可以避免某些系统性能问题,例如 Git 反应变慢的情况。 安装完成后,系统会提供以下三个组件: 1. **Git CMD**:基于 Windows CMD 的 Git 命令工具,但功能有限,不建议优先使用。 2. **Git GUI**:为 Windows 用户提供的图形化界面工具,适合简单的 Git 操作,但相比 GitHub Desktop 这类客户端显得不够直观和强大。 3. **Git Bash**:推荐使用的工具,它是一个完整的命令行环境,支持大多数 Unix/Linux 命令,并且对 Git 操作非常友好。 #### 初始化与远程仓库连接 在开始使用 Git Bash 进行版本控制之前,需要先初始化本地仓库并连接远程仓库: ```bash # 初始化 Git 仓库 git init # 克隆远程仓库到本地 git clone <远程仓库地址> ``` 克隆完成后,可以查看当前仓库的状态以确认是否有修改或新增文件: ```bash # 查看本地与远程仓库的差异 git status ``` #### 提交更改到远程仓库 完成本地开发后,可以通过以下步骤提交更改到远程仓库: ```bash # 添加所有更改到暂存区 git add . # 提交更改并添加注释 git commit -m "这里是提交的注释" # 切换到主分支(通常是 master 或 main) git checkout master # 获取远程仓库的最新更改 git pull # 将本地更改合并到远程分支 git merge local master # 推送本地更改到远程仓库 git push origin master ``` #### 常用命令 除了上述的基本操作外,还有一些常用的 Git Bash 命令可以帮助更好地管理代码: - **查看标签信息**: ```bash git tag ``` - **比较文件差异**: ```bash git diff ``` - **查看特定提交的详细信息**: ```bash git show ``` - **查看提交历史记录**: ```bash git log ``` - **管理远程仓库连接**: ```bash git remote -v ``` #### SSH 连接设置 为了更安全地连接远程仓库,建议使用 SSH 密钥进行身份验证。以下是设置 SSH 连接的简要步骤: 1. **生成 SSH 密钥**: ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` 按照提示选择保存路径并设置密码。 2. **添加 SSH 密钥到 GitHub 账户**: - 打开生成的公钥文件(默认路径为 `~/.ssh/id_rsa.pub`)。 - 复制公钥内容。 - 登录 GitHub,进入 **Settings > SSH and GPG keys**,点击 **New SSH key** 并粘贴公钥内容。 3. **测试 SSH 连接**: ```bash ssh -T git@github.com ``` 如果看到欢迎信息,则说明 SSH 连接已经成功配置。 #### 总结 通过 Git Bash,用户可以高效地管理代码版本并与远程仓库进行交互。无论是初始化仓库、提交更改还是设置 SSH 连接,这些操作都可以通过简单的命令完成。对于初学者而言,熟悉这些基础命令是迈向 Git 高级应用的第一步。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值