shell

shell是一个命令解释器,实际是一个程序,/bin/bash,linux中所有的命令都由它来解释,有自己的语法

shell脚本

以.sh结尾

shell语法+linux命令

注释:

单行注释 :
#
        多行注释 :
:<<c   c

shell执行方式

bash /path/to/script-name  或   /bin/bash /path/to/script-name    (强烈推荐使用)
        /path/to/script-name   或  ./script-name    (当前路径下执行脚本)
        source script-name  或  . script-name    (注意“.“点号后面有空格)

前两种执行时,都会开启新的进程执行脚本
        source不会开启新的进程

使用source时,可以与当前终端共享进程,共享变量(重点)

变量

1、name=itcast
        2、name='itcast
$age'  不会解析里面的遍历
        3、name=”itcast
$age“ 解析变量后,再拼接成新的字符串

命令变量

1、name=`ls`
        2、name=$(ls)

括号里必须是linux命令,把命令执行的结果记录给变量

全局变量

方法一:

变量名=值

export 变量

方法二:(最常用)

export 变量名=值

如果是在终端中定义全局变量,作用范围是当前终端及子进程

如果想要自己定义的全局变量在跟系统的全局变量一样在所有环境都有效,需要在~/.bashrc或/etc/profile文件中定义:

修改~/.bashrc后,直接打开新的终端,定义的全局变量就生效了,此方式只对当前用户有效
        修改/etc/profile时,需要重启操作系统,定义的全局变量才生效,此方式对所有用户有效
        上面两种方式在修改文件后,如果想让全局变量在当前终端生效,需要执行命令source ~/.bashrc或source /etc/profile

查看变量

标准使用方式:"${变量名}"

内置

$0  获取当前执行的shell脚本文件名
        $$  获取执行shell脚本的进程号
        $n  获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9就要用大括号括起来${10}
        $#  获取当前shell命令行中参数的总个数
        $?  获取执行上一个指令的返回值(0为成功,非0为失败)

$?:上一条命令是执行一个文件,返回的结果是文件中的最后一条命令

默认值

1、

变量a如果有内容,那么就输出a的变量值

​ 变量a如果没有内容,那么就输出默认的内容

​ 格式:

     ${变量名:-默认值}

2、

无论变量a是否有内容,都输出默认值

​ 格式:

    ${变量名+默认值}

测试语句

等号左右必须有空格,中括号左右必须有空格

test a = 1

[ a = 1 ]

逻辑表达式

&&符号
        命令1
&& 命令2
        如果命令1执行成功,那么执行命令2
        如果命令1执行失败,那么不执行命令2

||符号
        命令1 || 命令2
        1 如果命令1执行成功,那么不执行命令2
        2 如果命令1执行失败,那么执行命令2

文件表达式

判断是否是可执行文件

[ -f abc ] && [ -x abc
]

计算表达式

a=$((a+1))
        let a=a+1

重定向

命令>文件

命令返回的结果又正确和错误两种,1代表正确,2代表错误

bash chongdingxiang.sh
>/dev/null 2>&1 &

把正确的和错误的结果都输出到黑洞文件,而且命令在后台执行

linux四剑客

grep

grep -nr 关键字 .

find

find . -name
"*sh"

sed

  行编辑工具

-i 真正的修改

s:替换
                a:追加
                i:插入
                d:删除

sed -i "s#sed#SED#g"
sed.txt

每一行找到sed,把所有的替换为SED

sed -i
"2s#SED#sed#2" sed.txt

第二行的第二个SED替换为sed

sed -i "1,4a\hello2"
sed.txt

在1到4行的每一行后追加一行内容

sed -i "1i\hello3"
sed.txt

在第1行前插入一行

sed -i "2d" sed.txt

删除第2行

awk

分析工具,按行处理

awk
'BEGIN{FS=":";OFS="--"} {print $2,$NF}' awk2.txt

默认按照空格或tab键拆分数据,通过OFS指定输出时的分隔符

流程控制

  

  if语句

if [ 条件
]
        then
             指令1
        elif [ 条件2
]
        then
           
指令2
        else
           
指令3
        fi

#!/bin/bash

read -p "请输入性别:" sex
if [ "$sex" == "nan" ]
then
echo "输入的是男"
fi

  case语句

#!/bin/bash

case "$1" in
"start")
echo "启动"
;;
"stop")
echo "停止"
;;
"restart")
echo "重启"
;;
*)
echo "。。。。"
;;
esac

  for循环

遍历文件夹

#!/bin/bash

mkdir ../bak
for file in $(ls)
do
# echo "file: $file"
cp "$file" ../bak/"${file}-bak"
done

   seq命令

#!/bin/bash

for num in $(seq 5)
do
echo "num: $num"
done

   while循环

#!/bin/bash

count=1
while [ $count -lt 5 ]
do
echo "count: $count"
let count=count+1
done

   until循环

#!/bin/bash

count=1
until [ $count -ge 5 ]
do
echo "count: $count"
let count=count+1
done

  函数

#!/bin/bash

echo "jiaoben : $1,$2,$3"
dayin(){
if [ $# = 3 ]
then echo "hanshu : $1,$2,$3"
else
echo "需要3个参数"
fi
} #dayin e f g
dayin $1 $2 $3

    使用source执行脚本,脚本中定义的变量和函数都能在当前终端调用

让root用户能够使用python虚拟环境

export
WORKON_HOME=/home/python/.virtualenvs/
         source /usr/local/bin/virtualenvwrapper.sh

shell入门基础&常见命令及用法的更多相关文章

  1. Linux shell入门基础(六)

    六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...

  2. Linux shell入门基础(一)

    Linux shell入门基础(一): 01.增加删除用户: #useradd byf   userdel byf(主目录未删除)  userdel -r byf   该用户的属性:usermod 用 ...

  3. [Linux基础]Linux基础知识入门及常见命令.

    前言:最近刚安装了Linux系统, 所以学了一些最基本的操作, 在这里把自己总结的笔记记录在这里. 1,V8:192.168.40.10V1:192.168.40.11Linux ip:192.168 ...

  4. shell 入门及常用命令

    1.shell 是什么 shell是指一种程序, 它是和linux沟通的桥梁, 这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务, Ken Thompson 的 sh 是第一种 Un ...

  5. shell入门基础必备

    作者:KornLee 2005-02-03 15:32:57 来自:Linux先生    1.建立和运行shell程序   什么是shell程序呢? 简单的说shell程序就是一个包含若干行 shel ...

  6. shell 入门基础

    一. Shell变量 1. 变量可分为两类: 环境变量(全局变量) 和 局部变量 . 环境变量 : 所有的环境变量都是系统全局变量,可用于所有子进程中,这包括编辑器.shell脚本和各类应用 . 环境 ...

  7. linux下shell脚本中sed命令的用法

    先来给一个案例: #将old.sql文件中的符号“|”替换为“,”,并保存到test.sql文件中 sed "s/|/,/g" "old.sql"> te ...

  8. Linux shell入门基础(八)

    八.shell脚本sed&awk 01.sed的使用 流编辑器-Steam Editor #ed /etc/passwd 1,10p …… 1s/root/byf/p(替换root为byf) ...

  9. Linux shell入门基础(二)

    二.shell对文本的操作 01.查看文本的命令 #cat /etc/passwd(并非对文本文件操作) #tail -5 /etc/passwd(查看末尾5行) #tail -f /var/log/ ...

随机推荐

  1. Opencv2.4.13与Visual Studio2013环境搭建配置教程

    转载:http://www.jb51.net/article/108943.htm 一.安装包的下载与安装 Opencv可免费到官网上去下载,opencv是国外软件,在下载是由于受资源的限制,可能会出 ...

  2. 生命不息学习不止,前端js学习笔记(一)

    引言 从毕业到年已经整整7年,期间一直从事.net开发做c/s从 c# 转到 wpf 而后又开始做b/s 用silverlight,从最开始的arcgis engine 到后来的silverlight ...

  3. GIT团队合作探讨之二--Pull Request

    pull request是github/bitbucket给开发人员实现便利合作提供的一个feature.他们提供一个用户友好的web界面在进代码之前来讨论这些变更. 简单说,pull request ...

  4. 微软在Build 2016开发者大会中发布 “认知服务”,牛津计划有正式名字啦!

    2016年3月30日:微软在Build 2016开发者大会中发布“认知服务”. 在Build 2016开发者大会中,微软发布了新的智能服务:微软认知服务(Microsoft Cognitive Ser ...

  5. git go使用socket5代理

    git # set git through socks5 proxy: git config --global http.proxy socks5://127.0.0.1:1080 # Recover ...

  6. 打通 Spark 系统运行内幕机制循环流程

    本课主题 打通 Spark 系统运行内幕机制循环流程 引言 通过 DAGScheduelr 面向整个 Job,然后划分成不同的 Stage,Stage 是从后往前划分的,执行的时候是從前往后执行的,每 ...

  7. 重大漏洞!PHP multipart/form-data头部解析远程拒绝服务漏洞

    "有些人看不懂,简单比喻来说吧:目前刚出的任何安全防护都不会拦,网站类专属漏洞 畸形数据包,2KB随机数据包,2M网速打死各种网站,cdn通挂!"PHP multipart/for ...

  8. ERP系统架构

    分布式.服务化的ERP系统架构设计 ERP之痛 曾几何时,我混迹于电商.珠宝行业4年多,为这两个行业开发过两套大型业务系统(ERP).作为一个ERP系统,系统主要功能模块无非是订单管理.商品管理.生产 ...

  9. jemter 使用if控制器,选择需要的内容

    背景:需要根据人员传入的变量,来选择运行的环境,调用不同的参数,进行拼接,使用到if控制器 取到的数据,调用的就是test1的数据

  10. dom4j.jar有什么作用?

    om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代 ...