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. MySQL5.7的组提交与并行复制

    从MySQL5.5版本以后,开始引入并行复制的机制,是MySQL的一个非常重要的特性. MySQL5.6开始支持以schema为维度的并行复制,即如果binlog row event操作的是不同的sc ...

  2. Linux账号管理和ACL

    by zjmyster version :1.2 Linux账号管理和ACL权限设置: 主要相关配置文件:/etc/passwd /etc/shadow /etc/group /etc/gshadow ...

  3. selenium层级定位及鼠标键盘操作

    #code:utf-8 from selenium import webdriver from selenium.webdriver.common.action_chains import Actio ...

  4. LINUX基础了解

  5. MATLAB入门学习(整合)

    整合一下,都是链接地址: MATLAB入门学习(一):初次使用.. MATLAB入门学习(二):矩阵相关 MATLAB入门学习(三):矩阵常用函数 MATLAB入门学习(四):编写简单.m文件和函数文 ...

  6. java里面list是引用的好例子

    java里面的赋值和引用是不同的,以后要详细总结一下! 看一个例子: public static void main(String[] args) { List<String> list ...

  7. 关于SQL注入中编码问题的疑问

    提到SQL注入的绕过,编码是其中最普通的一种方法,最常用的URL编码.之前一直有个疑问,编码与未编码到底有哪些地方存在区别? 以下是本人自己对URL编码的一些见解,可能有错误的地方欢迎大佬们指正. 什 ...

  8. MyBatis(2)增删改查

    本次全部学习内容:MyBatisLearning   查: 根据id查询用户信息,得到一个用户信息   在User.xml文件中添加代码: <mapper namespace="tes ...

  9. 四. 引入unittest单元测试框架

    1.   安装 SeleniumIDE(firefox) (1)下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ (2 ...

  10. C# 控制台模拟序列化和反序列化

    序列化:将对象转换成二进制串的过程 反序列化:将序列化过程中产生的二进制串转换成对象的过程 作用:传输数据 using System; namespace WriteTextContent { [Se ...