shell

命令历史记忆功能
!number、!string、ctrl+r、!!
别名
alias、unalias

快捷键

<kbd>Ctrl</kbd>+<kbd>d</kbd>删除光标位置字符
ctrl+a 移动到命令行首
ctrl+e 移动到命令行尾
ctrl+l 清屏
ctrl+u 删除光标到行首,并复制到粘贴板、
ctrl+k 删除光标到行尾,并复制到粘贴板
ctrl+y 粘贴粘贴板内容

shell前后台作业控制

& 后台执行
nohup 不挂起任务
ctrl+c 终止当前操作
ctrl+z 当前任务到后台
bg % 1 将任务到后台
fg % 1 将任务到前台
kill % 3 关闭任务
screen、
jobs 查看任务

tee 将数据重定向到文件

admin@DESKTOP-H0TURO1 ~/script
$ ls | tee a | cat
spliter

admin@DESKTOP-H0TURO1 ~/script
$ cat a
spliter

shell通配符

  • 匹配任意多个字符
    ? 匹配任意单个字符
    [] 匹配括号中一个字符,[^a-z]取反
    () 子shell中执行括号内命令
    {} 集合
    \ 转义
  • 子shell中执行
    ~/script.sh
    bash script.sh
  • 当前shell中执行
    source script.sh
    . script.sh
# a.sh
##!/bin/bash
##echo $ID
[admin@DESKTOP-H0TURO1]$ . a.sh
20699
[admin@DESKTOP-H0TURO1]$ ./a.sh

[admin@DESKTOP-H0TURO1]$ source a.sh
20699
[admin@DESKTOP-H0TURO1]$ bash a.sh

[admin@DESKTOP-H0TURO1]$

shell变量

  • 自定义变量:变量名=变量值
    变量引用:$变量名、${变量名}
    read:读取键盘输入
  • 位置变量
    $1第一个入参
  • 环境变量
    export 修饰
  • 预定义变量
    • $?:上个命令的返回值 0表示成功
    • $!:上一个后台进程PID
    • $$:当前进程PID
    • $0:脚本名
    • $*$@:所有的参数
    • $#:参数个数
  • 只读变量
    readonly id=2
  • 删除变量
    unset id
  • 命令替换
    $()`` 命令替换,先执行命令再赋值
    num=$(date +%F)
    num=`date +%F`
    单引号中变量不起作用
    双引号中变量起作用
#!/bin/bash
id=12
echo $id,${id}

read -p "please input a number:" num
echo "input number is: $num"

echo "first variable is \$1: $1"
echo "script name is \$0: `basename $0` and `dirname $0`"
echo "last command return \$?: $?"
echo "parameter num is \$#: $#"
echo "all parameter is \$@: $@"

$ ./variable_01.sh lucy lilly
12,12
please input a number:2
input number is: 2
first variable is $1: lucy
script name is $0: variable_01.sh and .
last command return $?: 0
parameter num is $#: 2
all parameter is $@: lucy lilly

变量运算

expr 1+3
$(())
$[]
let num=1+1

  • 算术运算符
    +-\*/%==!=
  • 关系运算符
    -ge-gt-eq-ne-le-lt
  • 布尔运算符
    !-a-o
  • 字符串运算符
    =!=
  • 文件测试运算符
    -f-d
#!/bin/bash
a=10
b=5

var=`expr $a + $b`
echo "a+b=$var"

var=$((a - b))
echo "a-b=$var"

var=$[a * b]
echo "a*b=$var"

var=$[a / b]
echo "a/b=$var"
 
echo "a=$a,b=$b"
[ $a -le $b ] && echo "yes" || echo "no"
test $a -ge $b && echo "yes" || echo "no"

[ -f $0 ] && echo "yes" || echo "no"

变量内容删除和替换

${url#s}从前往后,最短匹配
${url##s}从前往后,最长匹配
${url%s}从后往前

if

if [ expression ] then echo "a" elif [ expression2 ] then echo "b" else echo "c" fi
test
[ ]
[[ ]]支持正则 =~

#!/bin/bash
read -p "please input first num " a
read -p "please input second num " b

if [ $a -gt $b ]
then
        echo "$a greater then $b"
elif [ $a -lt $b ]
then
        echo "$a less then $b"

else [ $a -eq $b ]
        echo "$a equals $b"
fi

seq序列命令

case

#!/bin/bash

read -p "please input a number between 1 to 4 " num

case $num in
        1)
                echo "you select 1"
                ;;
        2)
                echo "you select 2"
                ;;
        3)
                echo "you select 3"
                ;;
        4)
                echo "you select 4"
                ;;
        *)
                echo "err"
                ;;
esac

trap捕捉信号,执行命令

while

#!/bin/bash
a=1
while [ $a -lt 10 ]
do
        echo $a
        let a++
done

for

for ((i=0;i<10;i++))
do
        echo "loop $i"
done

for v in `seq 10`
do
        echo "loop2 $v"
done

for a in "a" "b" "c"
do
        echo $a
done

profile、bashrc

  • 系统级
    1 /etc/profile
    2 /etc/bashrc
  • 用户级
    3 ~/.bash_profile
    4 ~/.bash_rc
    5 ~/.bash_logout
    6 ~/.bash_history

登出时执行5、6
login shell
登录时执行1、2、3、4
su - alice
nologin shell
登录时执行2、4
su alice

函数

函数名(){}
function 函数名{}
函数的返回值是最后一条命令的状态码

shell默认返回值最大255

输入输出重定向

>输出重定向
>>拼接输出
<输入重定向
<<tag开始标记tag和结束标记tag之间的内容作为输入
> /dev/null输出屏蔽

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • shell概述 定义:shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系...
    绪_c150阅读 245评论 0 1
  • 【所有相关命令的基本语法可以通过man查看,善用man】 第三章:基本的bash shell命令 1:关于bash...
    我自去留阅读 838评论 0 0
  • Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shel...
    我在成熟你在变老阅读 495评论 0 3
  • [TOC] Shell基本介绍 shell学习必备基础 Linux的基本使用 如何在bash上执行程序 简单的管道...
    J书越来越垃圾了阅读 1,314评论 0 4
  • shell脚本 先开坑,大略地学一下,学习重点放在bash上,有需求再认真的学习细节的内容 Shell 脚本(sh...
    喵喵小阳阅读 401评论 0 1