01 . Shell详细入门介绍及简单应用
Shell简介
Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 解释处理Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出显示到屏幕给用户.
Shell分为两类
图形界面 Shell(GUI Shell)
GUI为 Unix 或者类 Unix 操作系统构造一个功能完善、操作简单以及界面友好的桌面环境。主流桌面环境有 KDE,Gnome 等。
命令行界面 Shell(CLI Shell)
CLI是在用户提示符下键入可执行指令的界面,用户通过键盘输入指令,完成一系列操作。
在 Linux 系统上主流的 CLI 实现是 Bash,是许多 Linux 发行版默认的 Shell。还有许多 Unix 上Shell,例如 tcsh、csh、ash、bsh、ksh 等。
如何查看系统支持的shell
一个系统中可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的,但是最常用的shell还是/bin/bash
cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
Shell命令基本格式
shell命令可以分为两大类
一类是内置命令,即系统自带的命令,如ls,这是显示文件夹下文件的命令;
另一类是外置命令,如vi,是调用vi编辑器的命令,而vi编辑器是一个软件,这类命令由独立的程序实现的命令,用于对linux的扩展,是外置命令
shell命令格式如下
命令名 [选项] <参数1> <参数2>…
# 方括号内为可选的,命令可能有0个或者多个参数。
系统变量
在命令行提示符直接执行 env、set 查看系统或环境变量。env 显示用户环境变量,set 显示 Shell预先定义好的变量以及用户变量。可以通过 export 导出成用户变量。
一些写Shell脚本时常用的系统变量
$SHELL 默认 Shell
$HOME 当前用户家目录
$IFS 内部字段分隔符
$LANG 默认语言
$PATH 默认可执行程序路径
$PWD 当前目录
$UID 当前用户 ID
$USER 当前用户
$HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间
$RANDOM 随机生成一个 0 至 32767 的整数
$HOSTNAME 主机名
普通变量与临时环境变量
普通变量定义:VAR=value
临时环境变量定义:export VAR=value
变量引用:$VAR
下面看下他们之间区别:
Shell 进程的环境变量作用域是 Shell 进程,当 export 导入到系统变量时,则作用域是 Shell 进程及其 Shell 子进程。
Shell 进程的环境变量作用域是 Shell 进程,当 export 导入到系统变量时,则作用域是 Shell 进程及其 Shell 子进程。
ps axjf 输出的第一列是 PPID(父进程 ID),第二列是 PID(子进程 ID)当SSH 连接 Shell 时,当前终端 PPID(-bash)是 sshd 守护程序的 PID(root@pts/0),因此在当前终端下的所有进程的 PPID 都是-bash 的 PID,比如执行命令、运行脚本。
所以当在-bash 下设置的变量,只在-bash 进程下有效,而-bash 下的子进程 bash 是无效的,当export 后才有效。
进一步说明:再重新连接 SSH,去除上面定义的变量测试下所以在当前 shell 定义的变量一定要 export,否则在写脚本时,会引用不到。
还需要注意的是退出终端后,所有用户定义的变量都会清除。
在/etc/profile 下定义的变量就是这个原理.
位置变量
位置变量指的是函数或脚本后跟的第 n 个参数。
1−1−n,需要注意的是从第 10 个开始要用花括号调用,例如${10}
shift 可对位置变量控制,例如:
#!/bin/bash
echo "1: $1"
shift
echo "2: $2"
shift
echo "3: $3"
sh test.sh 1 2 3
1: 1
2: 3
3:
# 每执行一次 shift 命令,位置变量个数就会减一,而变量值则提前一位。shift n,可设置向前移动n位。
特殊变量
$0 # 脚本自身名字
$? # 返回上一条命令是否执行成功,0 为执行成功,非 0 则为执行失败
$# # 位置参数总数
$* # 所有的位置参数被看做一个字符串
$@ # 每个位置参数被看做独立的字符串
$$ # 当前进程 PID
$! # 上一条运行后台进程的 PID
变量引用
| 赋值运算符 | 示例 |
|---|---|
| = | 变量赋值 |
| += | 两个变量相加 |
自定义变量与引用
a=123
echo $a
123
a+=456
echo $a
123456
# Shell 中所有变量引用使用$符,后跟变量名
# 有时个别特殊字符会影响正常使用,就需要使用${a},例如
[root@redis ~]# b=123
[root@redis ~]# echo $b
123
[root@redis ~]# echo ${b}
123
# 有时个别特殊字符会影响正常引用,那么需要使用${VAR}
[root@redis ~]# echo $b123
[root@redis ~]# echo ${b}123
123123
# 将命令结果作为变量值
[root@redis ~]# c=`echo 123`
[root@redis ~]# echo $c
123
[root@redis ~]# c=$(echo 123)
[root@redis ~]# echo $c
123
# 这里的反撇号等效于$(),都是用于执行 Shell 命令。
# 单引号和双引号
[root@redis ~]# d=1
[root@redis ~]# d="1 2 $d"
[root@redis ~]# echo $d
1 2 1
[root@redis ~]# c=1
[root@redis ~]# c='1 2 $c'
[root@redis ~]# echo $c
1 2 $c
# 单引号是告诉 Shell 忽略特殊字符,而双引号则解释特殊符号原有的意义,比如$ 、 !。
shell命令小知识
1.shell自动补齐和历史记录
shell会在用户输入命令前几个字母后按 键自动补齐,如果有多个候选命令会显示出全部命令。
shell会自动记录用户使用的命令,用户可以按 上 下 键 来查看。
2.shell提示符
shell提示符有两种,一种是 $结尾,为普通用户权限下的提示符号,一种是#结尾,为管理员权限,用户可以用su命令切换用户,如下图:
3.输入输出重定向
shell命令是控制台命令,使用标准输入和输出设备,即从键盘接受输入,将结果显示在显示器上。重定向可以将shell的输入输出重定向到文件或设备。
输入重定向符号为”<”,输出重定向符号为”>”和”>>”。如果shell命令 “X”在执行过程中,需要从控制台获得数据,那么执行”X < file”可以从file文件中获得所需数据。如果X在执行过程中产生数据,可以用 “X > file”和”X >> file”将结果输入到文件。”>”为覆盖输入,”>>”为追加输入
4.管道
linux系统中,管道是一种先进先出的单数据通道,利用管道符号”|”可以将多个命令组合到一起,把一个命令的输出传递给下一个命令作为输入,最终得到经过多个命令一次处理的结果。如,用ll和grep结合来查找当前目录是否有这个文件:
什么是Shell脚本
脚本就是shell命令组成的文件,这些命令都是可执行程序的名字,脚本不用编译即可通过解释器解释运行。
它是一种解释型语言,我们可以用shell脚本操存执行动作,用脚本判定命令的执行条件,用脚本来实现动作的批量执行
Shell简单使用
脚本开头
为了便于脚本的使用者可以快捷的了解到脚本的用途与其使用的解释器,通常我们需要在脚本的开头加上注释。
#!/bin/bash 脚本使用的解释器,通常用幻数“#!”指定
# Autho: 脚本作者
# Create_date 脚本创作时间
# Mail: 脚本作者联系方式
# Description: 脚本作用解释
# Version: 脚本的版本
脚本内容
在shell脚本中可以出现任何系统命令,输入你想要执行的命令即可,我们创建一个hello.sh
cat hello.sh
#!/bin/bash 脚本使用的解释器,通常用幻数“#!”指定
# Autho: 脚本作者
# Create_date 脚本创作时间
# Mail: 脚本作者联系方式
# Description: 脚本作用解释
# Version: 脚本的版本
echo hello
shell脚本的执行方法
首先我们给脚本执行权限
chmod +x 脚本路径/脚本名
执行方式1: 输入脚本的绝对路径或者相对路径
# 注意: 如果不给+x权限是不能这种方式执行脚本的
# 绝对路径
/root/test.sh
hello
# 相对路径
./test.sh
hello
执行方式2: sh +脚本
sh /root/test.sh
hello
执行方式3: source + 脚本
source /root/test.sh
hello
执行方式4: . + 脚本
. test.sh
hello
区别
# 第一种和第二种会新打开一个bash,不同bash中的变量无法共享,
# 第三种和第四种是直接使用当前运行环境作为解释器运行环境
01 . Shell详细入门介绍及简单应用的更多相关文章
- linux基础之Shell Script入门介绍
本文介绍下,学习shell script编程的入门知识,通过几个入门实例,带领大家走进shell script的神圣殿堂,呵呵,有需要的朋友参考下. 本文转自:http://www.jbxue.com ...
- javascript笔记01:javascript入门介绍
javascript是实现网页动态效果的基石,在web开发中扮演重要的角色,被广泛应用的各个领域 (1)网页游戏 (2)地图搜索 (3)股市信息查询 (4)web聊天 …………
- Java自动化测试框架-01 - TestNG之入门篇 - 大佬的鸡肋,菜鸟的盛宴(详细教程)
TestNG是什么? TestNG按照官方的定义: TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便. TestNG是一个开源自动化测试框 ...
- 【转载】salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL) salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesfo ...
- shell的select脚本的简单入门
shell的select脚本的简单入门 语法:select var in ...;do break;doneecho $var 示例: #/bin/bash echo "what is yo ...
- shell的case脚本的简单入门
shell的case脚本的简单入门 示例1: #/bin/bash a=$ case "$a" in ") echo 'hell 2';; ") echo 'h ...
- ant使用指南详细入门教程
这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...
- <转载>ant使用指南详细入门教程 http://www.jb51.net/article/67041.htm
这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...
- 【翻译转载】【官方教程】Asp.Net MVC4入门指南(1): 入门介绍
1. Asp.Net MVC4 入门介绍 · 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/ ...
随机推荐
- zookeeper面试题分析
1.什么是zookeeper? 1.zookeeper是一个分布式协调技术,是分布式数据一致性解决方案的典型代表,力求做到强一致性但最终实现的是最终一致性,采用CAP理论的AP,用来构建高可用分布式主 ...
- Java实现 LeetCode 767 重构字符串(ASCII的转换)
767. 重构字符串 给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同. 若可行,输出任意可行的结果.若不可行,返回空字符串. 示例 1: 输入: S = "aab&qu ...
- Java实现 LeetCode 649 Dota2 参议院(暴力大法)
649. Dota2 参议院 Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇) Dota2 参议院由来自两派的参议员组成.现在参议院希望对一个 Dota2 游戏里的改变作出决 ...
- Java实现 LeetCode 227 基本计算器 II(二)
227. 基本计算器 II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: 输入: ...
- Java实现最近点问题
**问题描述:** 给定某空间中(直线空间或平面空间)n个点,请找出它们中的最近点对.你需要完成下列任务: 1.随机产生或手工输入n个点的坐标. 2.输出最近的两个点的坐标. 3.算法尽可能效率高. ...
- java实现欧拉与鸡蛋
** 欧拉与鸡蛋** 大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子.她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋. 欧拉随便问:"卖了多少鸡蛋呢?" 不料一个说:&qu ...
- java实现第三届蓝桥杯拼音字母
拼音字母 在很多软件中,输入拼音的首写字母就可以快速定位到某个词条.比如,在铁路售票软件中,输入: "bj"就可以定位到"北京".怎样在自己的软件中实现这个功能 ...
- java实现第三届蓝桥杯机器人行走
机器人行走 [编程题](满分18分) 某少年宫引进了一批机器人小车.可以接受预先输入的指令,按指令行动.小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字). ...
- mysql基础-数据类型和sql模式-学习之(三)
0x01 mysql的两种方向: 开发DBA:数据库设计(E-R关系图).sql开发.内置函数.存储历程(存储过程和存储函数).触发器.时间调度器(event scheduler) 运维----> ...
- iOS-自定义 UITabBarController
先来回顾一下UITabBarController ( 稍微详细的在在http://blog.csdn.net/yang198907/article/details/49807011) 伴随UITabB ...