shell和下载工具
SHELL
shell 是一个命令解释器 而不是一门编程语言
空格用来分隔命令和传递给它的参数(或用来分隔命令的两个参数)
~/.bash_history 记录的是前一次登入以前所执行过的指令, 而至于这一次登入所执行的指令都被暂
存在内存中,当你成功的注销系统后,该指令记忆才会记录到 .bash_history 当中,如果开启多个bash,则最后登出的bash会把前面的覆盖
可以使用job control
在一个bash完成工作,主要是前景和背景
history #列出近期使用的历史命令
!66 #执行第 66 笔指令
!! #执行上一个指令,本例中亦即 !66
!al #执行最近以 al 为开头的指令(上头列出的第 67 个)
SHELL常用符号
echo $SHELL
env |grep SHELL
sh #可进入shell
echo $? #上个指令回传值 上条指令成功为0
1. * 通用符号,可以表示任意一个字符(包括空字符)或多个字符组成的字符串 ls -l /bin/e*
2. ? 类似*,但是只能表示单个字符
3. [] 制定被显示内容的范围 ls [a-c] 显示a 、b 、c文件夹
4. !排除符号 用来指定被屏蔽的部分,需要与[]一起使用 ls [!a-c] 不显示a、b、c文件夹
5. ; 分隔符号,多个命令分隔 ls;ls -l
6. ` 命令替代符,成对出现,包含的内容在shell中表示一条命令,并且会被执行,这不是单引号 echo `ls -l` 将命令的结果显示出来
7. # 注释符号
进阶
别名
# 事实上 .bashrc 是一个shell脚本文件,在用户登录到系统自动运行,可以把想让系统启动时运行的任务写进去 alias hs='hexo clean && hexo g && hexo s' # 注意等号前后无空格 别名相当与快捷键 alias #查看所有命令的别名 unalias command #取消
终端上快捷键stty -a 查看,set 设置,有bash一般不用设置
- Ctrl + C 终止目前的命令
- Ctrl + D 输入结束 (EOF),例如邮件结束的时候;
- Ctrl + M 就是 Enter 啦!
- Ctrl + S 暂停萤幕的输出
- Ctrl + Q 恢復萤幕的输出
- Ctrl + U 在提示字元下,將整列命令刪除
- Ctrl + Z 『暂停』目前的命令
使用 vim 时,若不小心按了 [ctrl]+s 则画面会被冻结。你可以使用 [ctrl]+q 来解除冻结
重定向 > 输入(覆盖) >> 输入追加 < 输出 << 立即文档(here document)
ls -l > test.txt # 把ls 的结果写入test.txt中 cat << EOF #告诉Shell从键盘接受输入 EOF作为结束,然后查看输入内容
管道 “|”
管线命令仅会处理 standard output,对於 standard error output 会予以忽略ls -l |grep test
网络
nmap -sn 10.1.1.1-255 #扫描局域网
shell编程
运行shell脚本
./test.sh
#! /bin/bash # 告诉系统解释此脚本文件的shell程序
- /bin/bash test.sh #这种方式不需要在第一行指定解释器 写了也没用
变量
- 局部变量
- 环境变量
- shell变量 由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量
等号两边不能有空格
your_name="runoob.com"
echo $your_name
echo ${your_name} # 最好加上括号
echo $$ # $本身也是变量 代表当前程序的pid
myUrl="http://www.google.com"
readonly myUrl # 只读变量
unset myUrl # 删除变量
环境变量RANDOM,产生随机数0~32767,(15位),想产生0~9的数值用declare宣告数值类型
declare -i number=$RANDOM*10/32768 ;
字符串
引号规则
- “” 阻止shell对大多数特殊字符(例如#)进行解释 但是$ ` “ 仍然保持其特殊含义
‘’ 阻止shell对所有字符进行解释 所有字符都会原样输出
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
- `` 倒引号括起来一个shell 命令时,这个命令将会执行 结果作为这个表达式的值
很多时候建议使用$(uname -r) 的形式获取变量或表达式的值,比``清晰,如
cd /lib/modules/$(uname -r)/kernel
字符串变量最好加上”” 清晰度
常用命令
字符串拼接
your_name="runoob" # 使用双引号拼接 greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 # 使用单引号拼接 greeting_2='hello, '$your_name' !' # 注意 单引号拼接 greeting_3='hello, ${your_name} !' echo $greeting_2 $greeting_3
获取字符串长度
string="abcd" echo $(#string) # 输出4
提取子字符串
string="runoob is a great site" echo ${string:1:4} # 输出 unoo
查找子字符串
string="runoob is a great site" echo `expr index "$string" io` # 输出 4 查找字符 i || o 位置
- 删除和替换
其他常用命令
- 字元转换命令: tr, col, join, paste, expand
- 分割命令: split
- 参数代换: xargs
数组
array_name=(value0 value1 value2 value3)
echo ${array_name[@]} # 获取数组中所有元素 @
length=$(#arrar_name[@]) # 数组元素个数
length=$(#arrar_name[*]) # 数组元素个数
length=$(#arrar_name[n]) # 单个元素长度
注释
# 单行注释 可以把一块代码定义成函数 达到多行注释
# 多行注释
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
# EOF 可以使用其他符号
:<<!
注释内容...
注释内容...
注释内容...
!
参数传递
$0 脚本自己的名字
$1 第一个参数
$2 第二个参数
...
${13} 第13个参数
$# 参数的个数
$* 以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$* 和 $@区别:
- 相同点:都是引用所有参数。
- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 “ * “ 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。
基本运算
计算表达式的值
num=$[ $num + 1 ]
expr 1 + 2
let num=$num+1 # 用于计算整数表达式的值
val=`expr $a \* $b` #等号两边没有空格 乘法
[ $a == $b ] # 注意有空格
字符串运算符
a="abc"
[ -z $a ] #检测字符串长度是否为0 是 true
[ -n "$a" ] #字符串长度是否为0 不为0 true
[ $a ] #检测字符串是否非空 不为孔 true
注意:判断非空是用了双引号
字符串比较时 == 可以用 = 替代
文件测试运算符
test命令和[
if语句不执行任何判断 实际接收一个程序名作为参数,依据程序返回值判断执行相应的语句
if ./testscript 0 ## 如果返回值为0
if通常两种方式
if test "$password" = "join"
if [ "$password" = "join" ]
while有时可以不用test
while test $number -le 100
while read n # 每条指令都有返回值 可以利用 read 读取到键盘输入返回0 ctrl+D出入文件结束符则返回非0 通常是1
for语句
for i in 1 2 3
for i in `seq 3` # 1 2 3 注意是反引号
- 字符串比较
- 文件测试
- 数字比较 只能比较整数
函数
$? 获得上一条语句返回值
如果函数没有明确指定返回值 则是最后一条语句运算结果 0 为true 1 为false
仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。
重定向
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
- 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
command 2 > file # 错误文件重定向到file command > file 2>&1 # stdout和stderr合并到file 放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符 tee file # 双重导向 往下级传输的同时输出一份到屏幕
即时脚本 here document
基本形式
command << delimiter document delimiter
例子
$ wc -l << EOF
欢迎来到
菜鸟教程
www.runoob.com
EOF
禁止输出
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
command > /dev/null
command > /dev/null 2>&1
文件包含
两种方式 都不需要执行权限就可以
. filename # 注意点号(.)和文件名中间有一空格
source filename # 这种方式也可以
source命令可以让一个脚本强行影响其父shell环境
export命令可以让脚本影响其子shell
export EDITOR=’gedit’
运行一个shell脚本时会启动另一个命令解释器.
每个shell脚本有效地运行在父shell(parent shell)的一个子进程里。.
这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.
export | grep ROS #查看ROS相关的bash变量
变量键盘读取、阵列与宣告:read, array, declare
read:读取键盘输入
read -p "Please keyin your name: " -t 30 named
- read接受变量名为参数 从标准输入接收到的信息储存 如果没有提供变量 则储存在REPLY
用作输出一段内容后暂停
echo "press enter to continue" read
declare / typeset:宣告变量类型
declare [-aixr] variable 选项与参数: -a :將后面名为 variable 的变数定义成为阵列 (array) 类型 -i :將后面名为 variable 的变数定义成为整数数字 (integer) 类型 -x :用法与 export 一样,就是將后面的 variable 变成环境变数; -r :將变数设定成为 readonly 类型,该变数不可被更改內容,也不能 unset
注意:变量类型预设为字符串,1+2不会计算,除非申明为integer;bash只能进行整数运算,1/3=0
exit trap
exit 返回信号
trap 捕捉信号
trap ‘echo “goodbye”; exit’ EXIT # 捕捉退出
常用命令
- cut 指定的方式分割行
- diff 比较文件差异
- sort 按照字母排序(不改变源文件)
- uniq 对已经排好序的输入删除重复的行
- tr 按照制定方式对字符进行替换
- wc (word counts) 统计文中字节 单词 行的数量
substr 从字符中提取一部分 必须搭配expr进行求值
expr substr "hello world" 1 5 # hello 起始位置从1开始算
- seq 产生一个整数序列
bash
- type cd 查询是否为内建命令
常用组合键
[ctrl]+u/[ctrl]+k 从光标处向前删除指令串 及向后删除指令串 [ctrl]+a/[ctrl]+e 让光标移动到整个指令串的最前面 或最后面 home end也可以
下载工具
- apt
- wget
Transmission #种子下载
wget -r -np -nd http://10.143.2.9/packages/ 递归下载 不遍历父目录 不在本地重新创建目录 wget -r -np -nd --accept=cpp http://10.143.2.9/packages/ 递归下载 不遍历父目录 不在本地重新创建目录 扩展名为cpp的文件 wget -i filename.txt URL地址放在filename.txt文件,自动下载所有文件 wget -c ... 断点续传
引用
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 yangbenbo@whu.edu.cn
文章标题:shell和下载工具
本文作者:杨本泊
发布时间:2019-09-29, 12:27:00
最后更新:2023-07-09, 07:10:11
原始链接:http://yangbenbo.github.io/2019/09/29/shell和下载工具/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。