Shell基础

基础命令

awk ' {print $n,$m,..}'     --过滤出列中的n,m列内容
    -F:     --指定默认分割符为“:”
&&      --连接两条命令,前面成功,才执行后一条命令
||      --连接两条命令,前面失败,才执行后一条命令
;       --连接两条命令,不管前面执行情况,后面始终执行

脚本的基础格式

vim xxxx.sh
    #!/bin/bash
    # 描述语言
    # 联系方式
运行方式:
    ./xxxx.sh   --在子bash下运行,不改变当前工作目录
    . /路径/xxxx.sh     --在当前bash下运行,改变当前工作目录

重定向

|>   --覆盖源文件
>>  --末行追加文件
echo "123" |passwd --stdin bob  --非交互模式设置用户密码
<   --导入符号
2>  --将错误信息导入到某个文件中:/dev/null(这是一个无底洞)
&>  --将标准信息导入到某个文件中(错误信息也是标准信息)

变量

变量名=变量值 |`命令`(把命令执行的结果赋给变量)=$(命令)
read 变量名1 变量名2 ...
    变量值1 变量值2 ...
    -p "交互式提示语言" 变量名...
echo ${变量名}
单双引号的区别:单引号不引用引号内的变量,双引号会
export 变量名=变量值    --赋予系统全局变量
expr 值 +|-|\*|/|% 值     --四则运算
bash的历史记录文件:
    /etc/profile
        HISTSIZE=数字   --记录bash历史记录的条目数量
位置变量
    expr $1 + $2
    在运行的时候,在脚本后面跟两数字:./xxx.sh 20 30
预定义变量:
    $#  --统计位置变量个数
    $*  --回显位置变量的值
    $n  --回显第n个位置变量的值
    $?  --回显上条命令执行是否成功:1为失败,0为成功
    $$  --回显脚本的执行是产生的进程号

几个简单的特殊符号

.       --匹配任意单个字符
[]      --表示匹配内部任意一个变量
^       --去反
*       --o*左邻字符:左边有任意多个o
\{\}    --o\{2,5\},左邻字符有2-5个o
\(\)    --把符合的字符串保存,\1:提取要第一个保存的值,\2:提取保存的第2个值..

非交互式vim

sed 选项 '动作' /文件名
    选项:
        -i  :直接修改文件内容
        -n  :使用静默模式
    动作:
        d   :删除(sed '1,4d' | '/lp/d' | '/lp/!d')
        a   :新增(sed '行号a 内容' | sed "${变量}a 内容" )
        c   :取代('/某行内容的一部分/c 取代的新内容')
        i   :插入
        s   :替换(sed -n 's/原值/替换值/gp' | 's!/../..!/.../...!p:以:为分隔符)
        p   :打印和-n配合使用
一些例子:
    建立测试文件cp /etc/passwd /tmp
    -sed ‘1,4d’ /tmp/passwd                 ---显示删除1-4行
    -sed -i '1,4d' /tmp/passwd              ---直接应用到文件中
    -sed '2a simplexue.com' /tmp/passwd     ---在第2行增加内容
    -sed '2i simpleware.com' /tmp/passwd    ---在第2行插入内容
    -sed '/lp/d' /tmp/passwd                ---删除关键字所在行
    -sed '/lp/!d' /tmp/passwd               ---删除除关键字以外的其他所有行
    -sed '/lp/p' /tmp/passwd                ---显示匹配行,并且后面会显示整个文件
    -sed -n '/lp/p' /tmp/passwd             ---只看匹配行
    -sed -n 's/lp/lg/gp'/tmp/passwd         ---替换文件中所有lp为lg
    -sed -n 's/lp//p' /tmp/passwd           ---显示删除lp
    -sed -n ‘s/\(lp\)/\1ailg/p’ /tmp/passwd ---\1调用储存变量lp
    -sed -n '/lp/s:/sbin/nologin:/bin/bash:p' /tmp/passwd   ---用:代替分割付/
    -sed -n '2,4s!/sbin/nologin!/bin/bash!p' /tmp/passwd    ---用!代替分隔符/
    -sed '/search/c search simplexue.com' /etc/resolv.conf  ---更改匹配行内容

条件

LINUX中随机数:RANDOM | (SJ=$((RANDOM%100)):取100以内的随机整数)

文件判断

[ 选项 /文件 ] | test 选项 /文件
    选项值:
        -d  :是否为目录
        -f  :是否为文件
        -e  :是否存在
        -r  :是否有读权限
        -w  :是否有写权限
        -x  :是否有执行权限

数字判断

[ 数字 符号代码 数字 ]
    符号代码:
        -eq :等于
        -ne :不等于
        -gt :大于
        -ge :大于等于
        -lt :小于
        -le :小于等于

字符串的比较

[ 字符串1 = 字符串2 ]   :判断两个字符串是否一样
    !=  :不等于
[ -z $变量名 ]          :检查变量是否为空

条件判断

if 条件
    then 动作
elif 条件
    then 动作
elif 条件
    then 动作
else
    动作
fi      --结束if条件判断

for循环

for 变量 in 取值列表
do
    动作
done        --for结束标志

while循环

while 条件
do
    动作
    let 变量操作
done

case循环

case 变量 in
    条件1)
        动作1
    ;;
    条件2)
        动作2
    ;;
    ...
    *)
        默认动作
esac        --case结束标志

函数

函数名()
{
    动作
    动作
    ...
    return value
}

启用颜色字体

echo -e "[\\033[0;32;5m OK \\033[0m]"

远程交互式脚本

yum install expect
脚本语言
"注意:空格的问题"
    #!/usr/bin/expect
    set timeout 30(-1:永不过期)
    spawn ssh 用户名@IP "执行的操作"
    expect "第一种情况" { 
                操作:send "需要发送的信息\r" 
                expect "子情况"
                子操作:send "需要发送的信息\r"
                } "第二种情况" { 
                操作:send "需要发送的信息\r"
                }
    interact        ---执行完成后把控制台交个当前bash
    $argv           --获取变量
嵌套:
    #!/bin/bash
    expect << EOF(end of file)
    ...(expect脚本语言)
    expect eof
    EOF

一个实例

#!/bin/bash
for IP in 100 1 2 3
do
    IPADDR=192.168.0.$IP
    expect << EOF
    spawn ssh root@$IPADDR "sed -i '1i nameserver 8.8.8.8' /etc/resolv.conf"
    expect "(yes/no)?" { 
        send "yes\r"
        expect "passwd:"
        send "password\r"
    } expect "passwd:" { send "password\r" }
    expect eof
EOF         --结束expect解释器,必须和do缩进一样
done
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,183评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,850评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,766评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,854评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,871评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,457评论 1 311
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,999评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,914评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,465评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,543评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,675评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,354评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,029评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,514评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,616评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,091评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,685评论 2 360

推荐阅读更多精彩内容