`
tjcjc
  • 浏览: 22160 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

关于bash

阅读更多
1.linux启动过程:
init——》getty(提供标准输入、输出、错误输出)——》/bin/login(验证密码、建立初始环境)
————》启动登录shell——》/bin/bash(寻找系统文件/etc/profile,执行其中的命令)——》在用户目录下查找
.bash_profile,或者.bash_login,再或者.profil)——》用户目下的.bashrc

set -o
可以查看bash的选项使用情况
allexport 所有变量会传给子shell
noclobber 重定向时防止文件被覆盖

. .bash_profile与source .bash_profile都是运行.bash_profile文件

处理命令的顺序:
别名——》关键字(if、function、while、until)——》
函数——》内置命令(pwd)——》可执行程序或脚本(date)
使用type str来查看str是什么

bash提供了三个命令来改变命令执行顺序:
command:忽略别名和函数,只处理内置命令和可执行文件
bultin:只查找内置命令,忽略函数和可执行文件
enable:可以打开enable -n 可以关闭bultin命令,即使有内置命令还是执行用户的程序
enable -n;
function cd {bultin cd; echo $PWD}
如果在大括号中执行cd 就会无限循环,必须显示执行bultin的cd

退出状态
在一个命令或程序结束之后,都会给父进程返回一个退出状态。0~255
0表示成功执行,非零都为失败,127为没有找到命令,
如果是致命信号导致了命令退出就是128加上导致器退出的信号值
$?可以查看上一条命令的返回值

后台执行命令

在命令之后加一个&就会让它在后台执行,shell会马上返回
$!是最近送入后台执行的命令

作业控制
重置该功能:
set -m
set -o monitor
bash -m -i

ctrl-z:可以将回话挂起
jobs显示现在后来运行的作业
jobs -l显示后台作业与其pid号
bg后台执行,fg前台执行 这两个后面都是加%工作号
%%表示最近的进程,
%string 以string开头的进程   %?string 含string的作业名
jobs -r 列出所有正在运行的进程
jobs -s 列出所有挂起的进程
disown %n 将第n个job移出后台

命令行快捷键
history 显示最近执行的命令
history都写在.bash_history中
fc 从最近的历史中选择命令,
fc -l 列出最近的命令
fc -e editor 将命令历史在编辑器中打开
fc -l n-m 列出从n到m的命令
fc -s string 访问以string开头的命令
!! 重新执行上一条命令
!N 重新执行历史列表中第N条命令
!string  重新执行以string 开头的命令
!:N 上一条命令第N个参数
!$ 上条命令的最后一个参数
!^上条命令的第一个参数
!*上条命令的所有参数

重命名
alias一般都写在.bashrc中
alias m=more
unalias m 删除一个别名
/m 临时禁止别名

管理目录栈
pushd 目录 压入栈
popd 到栈里的最后一个目录
dirs 列出栈中的目录

匹配
echo f{oo,aa,umble} 匹配字符集
unset nogolb 或者 set +f 可以禁止匹配
chopt

变量
(1)局部变量
1.name=tommy   可以这样赋值
2.declare name=tommy 或者这样
-f 列出函数名及其定义  -F列出所有函数名
echo $name 引用变量时之前必须加$
$$代表当前的进程号
bash可以进入一个子进程 exit可以退出
declare -r name=tommy 可以设置一个只读变量 ×等号两边不能加空格×
readonly name 也可以将name设置成只读变量
unset name 可以删除name变量
(2)全局变量
export NAME=john
declare -x NAME=john
NAME=john; expport NAME
export -p 显示所有的全局变量;
export -f name-value的形式被视为函数而不是变量
export -n 将已导出的转换为局部变量
子进程重新设置全局变量以后不会影响父进程中的全局变量
使用转义时echo 需要有-e选项
3.变量扩展修改符
${newfruit:-apple}--> newfruit定义了的话就输出newfruit的值 没有就是apple
${newfruit:=apple}--> 效果同上,但是没有定义newfruit,newfruit会被赋值apple
${newfruit:+apple}--> 若设置了newfruti,他会输出apple
${name:?str}--> 若没有设置name,则会输出str
${name:offset:len}--> 若设置了name,就会输出name的子字符串
pathname="/usr/bin/local/bin"
${pathname%/bin*}--->/usr/bin/local  删除最短匹配
${pathname%%/bin*}--> /usr  删除最长匹配
${pathname#/usr}--> /bin/local/bin删除字符串开始时的usr 若开始不是usr,则没有改变
${pathname##*}-->        删除字符串开头的×匹配, 最大删除,所以会全删
${#pathname}14  输出字符串的长度
$0  字符串的长度
$1-9 位置参量1-9
${10} 位置参量10
$# 位置参量的个数
$* 所有的参量值 $@与此相同,但是有双引号时不同
"$*"-->"$1 $2 $3"  "$@"-->"$1" "$2" "$3"
set a b c d e f g h i j k l m    设置位置参量
print $10-->a0
print ${10}-->j
echo \$$#-->$13
eval echo \$$#-->m
set -- 清空所有变量
4.变量引用
name=tjc
echo \$name --> $name
echo '$name\t$name' --> $name\t$name
echo "$name\t$name" --> tjc  tjc
echo name --> tjc
5.命令替换
echo "The hour is `data '+%H'"
name='awk -F: '{print $1}' database'
echo $name --> 显示awk的执行结果
echo 'basename \'pwd\'' --> tjc 使用嵌套替换时需要用反斜杠将嵌套命令的‘括起来
echo "$(cal)" 输出日历
数学扩展
$[2+3] 或者 $((2+3))
5.数组
declare -a name
name=(item1 item2 item3)
echo ${name[0]}-->item1   数组下标从一开始  输出时必须用${}括起来
echo ${name
  • }--> item1 item2 item3
  • 还可以这样定义states=(ME [2]=1 [5]=3) 没有声明的位置就为空
    6.函数
    function function_name(){}
    export -f 函数名 可以让这个函数变成全局的
    7.exec命令
    exec 3<datefile  定义一个文件的输出gd3
    sort <&3         将fd3的内容sort一下
    exec 4>newfile   定义一个心得newfile的输入fd4
    ls >&4      将ls的结果输入到fd4中
    exec 5<&4   创建fd4的拷贝gd5
    exec 3<&-   关闭fd3
    exec在读入时会一行一行的读 而sort或者cat 每次读入一行都会关闭文件然后再打开读入下一行

    xargs命令
    ls|grep -v info|xargs rm

    分享到:
    评论

    相关推荐

      BASH漏洞检查

      Linux中一个对计算机用户造成的威 胁“ Bash” 漏洞

      Linux攻略 关于Bash命令行处理概括介绍

      #### 关于引号 在Bash命令行处理过程中,引号有着特殊的含义: 1. **单引号**: - 使用单引号`' '`可以避免上述所有处理步骤的发生,即单引号内的内容被视为一个整体,不会被解析或替换。 2. **双引号**: - ...

      我觉得最好的Bash Script

      本文档是关于 Bash Script 的详细指南,旨在为读者提供从基础到高级的 Shell 编程技术。作者 Mendel Cooper 和译者杨春敏、黄毅通过这本书,想要提供一个系统化的学习 Bash Script 的方法,让读者能够快速掌握 Shell...

      bash-4.1.2-15

      关于 Bash shell 的知识点包括但不限于: 1. **基本语法**:了解变量声明、赋值、条件语句(if...else)、循环结构(for, while)、函数定义等基本语法。 2. **命令行参数**:学习如何处理命令行输入的参数,例如 `...

      Bash的特性介绍BashInfo

      ### Bash的特性介绍 #### 一、Bash简介 Bash(Bourne-Again SHell)是一种广泛使用的Unix shell程序,它继承了Bourne shell(sh)的基础功能,...以上就是关于Bash的一些基本介绍和实用技巧,希望能对大家有所帮助。

      Learning the bash Shell(中文版第二版)

      《Learning the bash Shell(中文版第二版)》是关于学习和掌握bash Shell使用方法的专业书籍。bash Shell是自由软件基金会发布的“Bourne Again Shell”的简称,它是UNIX Bourne Shell的免费替代产品。本书是bash的...

      30分钟搞定BASH脚本编程.txt

      从给定的文件信息中,我们可以提取出关于BASH脚本编程的重要知识点,这些知识点涵盖了从基础知识到高级功能的广泛范围。 ### BASH脚本基础 #### Hello World示例 脚本通常以`#!/bin/bash`行开头,这被称为shebang...

      学习Bash(第二版)中文版.pdf

      根据提供的文件信息,我们无法直接从内容中获得关于Bash脚本编写的具体知识点,因为提供的链接和描述中并未包含具体的技术细节。然而,由于标题明确指出了文档内容是关于学习Bash(第二版)中文版,我们可以根据这...

      学习bash(第三版)_英文版

      - **1.10 获取帮助**:指导用户如何查找更多关于Bash的帮助信息。 - **第2章 命令行编辑** - **2.1 启用命令行编辑**:演示如何开启命令行编辑功能。 - **2.2 历史列表**:讲解如何使用和管理命令历史。 #### 6....

      shell bash 手册

      根据提供的文件信息,我们可以从中提炼出关于Bash Shell的一些关键知识点。这些知识点涵盖了从基本概念到高级用法的广泛范围。 ### 一、为何使用Shell Shell是用户与操作系统之间的接口,它允许用户通过命令行界面...

      BASH官方文档BASH官方文档

      这份文档包含了关于BASH的详细信息,包括语法、命令行操作、脚本编写、控制结构以及各种内部命令和函数。 **1. BASH基本概念** - **Shell**: Shell是操作系统与用户交互的接口,允许用户输入命令并执行。 - **...

      关于bash函数你可能不知道的一些事情(译)

      关于bash函数,这里有一些您不知道的东西。通常当你写一个函数时,你会这样做: function name () { ... } 不是吗?我知道你会这么做,因为这是所有人写函数的方式。这就是我要说的。在bash中 {…} 并不像在...

      bash-3.2-33.el5_11.4.x86_64

      标签“bash-3.2”进一步强调了讨论的主题是关于Bash 3.2版本的,这可能是为了区分不同版本的Bash,因为每个版本可能会有不同的安全问题和更新。 在压缩包子文件的文件名称列表中,“bash-3.2-33.el5_11.4.x86_64....

      高级bash教程 打包

      首先,我们来看看`bash编程.chm`,这可能是一个关于Bash编程的手册或指南,通常`.chm`文件是Microsoft的 Compiled HTML Help 格式,用于存储电子书或教程。在这个文件中,你可能会找到Bash的基本语法、变量、控制...

      高级Bash脚本编程

      然而,市面上关于Bash的书籍良莠不齐,缺乏一本全面、深入的指南。幸运的是,《高级Bash脚本编程指南》的出现填补了这一空白。 #### 关键知识点解析 **1. 特殊字符** Bash脚本中存在多种特殊字符,它们具有特定的...

    Global site tag (gtag.js) - Google Analytics