`

shell 雾草篇0

 
阅读更多

 

 

shell之 概念

 

Shell是用户与Linux操作系统沟通的桥梁
Linux的Shell种类众多,这里我们学习的是bash,也就是Bourne Again Shell
由于易用和免费,Bash在日常工作中被广泛使用
Bash是大多数Linux系统默认的Shell。


文件名后缀通常是.sh

#!/bin/bash
#这里是注释

在一般情况下,人们并不区分 Bourne Shell和Bourne Again Shell,所以,在这里,我们可以看到#!/bin/bash,它同样也可以改为#!/bin/sh。

 

 

shell之 变量概念

 

0 变量不需要声明,初始化不需要指定类型 
变量命名
1:不能使用程序中的关键字(保留字)
2:只能使用数字,字母和下划线,且不能以数字开头
3:建议命令要通俗易懂


1 变量使用两种方式

$变量名
${变量名}

例如:echo $JAVA_HOME
或者echo ${JAVA_HOME}



两种方式的区别:
	如果变量后紧跟着别的字符,请用${}  eg:  ${JAVA_HOME}isthepath

 

shell之 变量分类

 

本地变量

   只对当前shell进程有效的,对当前进程的子进程和其它shell进程无效。
   定义:VAR_NAME=VALUE
    变量引用:${VAR_NAME}
    取消变量:unset VAR_NAME


环境变量

   自定义的环境变量对当前shell进程及其子shell进程有效,对其它的shell进程无效
   关键词: export
   定义:export VAR_NAME=VALUE
   对所有shell进程都有效需要配置到配置文件中
  vi /etc/profile
   source /etc/profile



局部变量

   函数调用结束,变量就会消失 
   对shell脚本中某代码片段有效
   关键词 local
    定义:local VAR_NAME=VALUE



位置变量

$1,$2,.....${10}....
test.sh 3 89
    $0:脚本自身
   $1:脚本的第一个参数
   $2:脚本的第二个参数


特殊变量

   $?:接收上一条命令的返回状态码
   $#:参数个数
   $*:或者$@:所有的参数
   $$:获取当前shell的进程号(PID)(可以实现脚本自杀) kill -9 pid是他杀   kill $$是自杀

 

shell之 脚本执行的三种方式

 

1 相对路径下执行
  切换到你的shell文件所在的目录下来, 通过 ./you.sh来执行
   因为你的shll文件目录未必就在PATH环境变量中,因此需要切换到你的shell文件所在目录后
   显示声明在当前目录下 ./来执行你的shell文件

2  绝对路径下执行: /data/shell/hello.sh

3 直接使用bash 或sh 来执行bash shell脚本
   是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用指定bash路径自然也好理解了
   cd /data/shell
    bash hello.sh

   或者:
   cd /data/shell
   sh hello.sh

 

 

shell之 三种引号

 

 

 

 

''单引号不解析变量, 里面是啥就打印啥 
""双引号会解析变量, eg   echo "$name" 就会打印   zm出来 
``反引号是执行并引用一个命令的执行结果,类似于$(...)
   eg  `$JAVA_HOME` :  1 先将$JAVA_HOME解析出来  2 将$JAVA_HOME解析出来的字符串作为命令来执行
   eg `echo ls`  将 echo ls的东西作为命令来执行,最终打印出当前目录下所有的文件夹

 

shell之 条件测试:

 

bash条件测试
     命令执行成功与否即为条件测试
	 两种方式:
          test EXPR 
          [ EXPR ]:注意中括号和表达式之间的空格
		  
     整型测试:
          -gt:大于:例如[ $num1 -gt $num2 ]     gt = greater
          -lt:小于                              lt = lowter
          -ge:大于等于                          ge = great equal
          -le:小于等于                          le = lower equal
          -eq:等于                              eq = equal
          -nq:不等于                            nq = not equal
		  
     字符串测试:  ------>  是按照字典顺序比较的  如果是数字来比较 那么应该用上面写法
          >:大于[ "$str1" \> "$str2" ] 注意测试符号左右的空格  \是转义符
          <:小于
          =
        !=

 

shell之 算术运算

 

shell是弱类型 因此1+2会被理解为字符串 

let varNamer=算术表达式  --->最常用

varName=$[算术表达式]

varName=$((算术表达式))

varName=`expr $num1 + $num2`

 

 

 

 shell之 for循环

 

通过使用一个变量去遍历给定列表中的每个元素,在每次变量赋值时执行一次循环体,直至赋值完成所有元素退出循环
格式1
for ((i=0;i<10;i++))
do
  ...
done
格式2
for i in 0 1 2 3 4 5 6 7 8 9 
do 
...
done
格式三
for i in {0..9}
do
  ...
done

 

shell之  while/until循环

适用于循环次数未知,或不便用for直接生成较大的列表时
 格式:
while 测试条件;do
	循环体
done
 如果测试条件为“真”,则进入循环,测试条件为假,则退出循环。
until循环的格式和while循环的格式一致,但是和while循环的意思相反,如果测试条件为假,则进入循环,退出条件为,测试条件为真

 

for 和  while 类似, 都是  do  循环体  done  仅仅是头部分写法不一样  for ((...))   while [ 1 -eq 2 ] 

 

 

shell之 if

 

单分支
 if 测试条件;then
	选择分支
 fi
双分支
 if 测试条件; then
   选择分支1
   else 
   选择分支2
   fi 
多分支
 	if 条件1;  then
               分支1
          elif 条件2; then
               分支2
          elif 条件3; then
               分支3
          ...
          else 
               分支n
          fi

 

shell之 case

有多个测试条件时,case语句会使得语法结构更清晰
格式: case 变量引用 in
               PATTERN1)
                         分支1
                         ;;
               PATTERN2)
                         分支2
                         ;;
               ...
               *)
                         分支n
                         ;;
               esac
PATTERN :类同于文件名通配机制,但支持使用|表示或者
a|b:a或者b
*:匹配任意长度的任意字符
?:匹配任意单个字符
[a-z]:指定范围内的任意单个字符


eg:

case $1 in
1)
echo "1"
;;
2)
echo "2"
;;
*)    *在linux统配所有,如果上面的流程都没走到,那么$1的数据必然会被*统配匹配到 从而输出none
echo "none"
;;

 

shell之  自定义函数:

function 函数名(){
  ....
}

引用自定义函数文件时,使用source  func.sh
有利于代码的重用性


eg:

[root@bogon ~]# cat hello.sh 
#!/bin/sh
#
function hello(){
   echo "hello world"
}



[root@bogon ~]# cat test.sh
#!/bin/sh
#
source /root/hello.sh  ----> 引用文件
hello      ---->  执行引用文件内的函数


[root@bogon ~]# ./test.sh
hello world

 

shell之 date

显示当前时间
格式化输出 +%Y-%m-%d   
   linux时间-->人类时间
格式%s表示自1970-01-01 00:00:00以来的秒数
指定时间输出  --date='2009-01-01 11:11:11'   人类时间-->linux时间
指定时间输出  --date='3 days ago'


date +%Y-%m-%d  --date='3 days ago'     今天的3天前的日子 用 y-m-d格式输出

date +%s
date --date='2015-12-11' +%s
这样可以比较这两者的差值 

 

 

 

 

分享到:
评论

相关推荐

    SHELL基础十二篇

    9. **数组操作**:在Shell中,数组可以存储一组相关的值,如`myarray=(value1 value2 value3)`,通过`${myarray[0]}`访问第一个元素。 10. **命令替换**:使用反引号(`)或$( )执行命令并替换其结果,如`echo $...

    学习shell的入门资料(shell十三问+shell基础十二篇)doc版

    本资源包含了两份文档——《shell十三问》和《shell基础十二篇》,是初学者快速掌握Shell编程的优秀教程。 1. **Shell基础知识** - **变量与赋值**:在Shell中,变量可以用来存储各种类型的数据,如字符串、整数。...

    shell基础12篇13问

    shell是直接与内核进行交互,属于比用户程序层更深入的一种程序语言。shell的简单,高效,优雅,基础问答,让你对shell有初步了解

    shell基础十二篇.pdf

    ### Linux Shell基础知识详解 #### 一、Shell简介 在Linux操作系统中,Shell是一种用户与操作系统交互的接口。Shell不仅能够执行命令,还可以编写脚本来自动化一系列任务。对于初学者而言,掌握基本的Shell命令和...

    WINDOWS之SHELL编程VC篇源码

    本资源"WINDOWS之SHELL编程VC篇源码"提供了使用Visual C++(VC)进行Shell编程的经典示例,对于想要深入理解和实践Windows Shell编程的开发者来说是极好的参考资料。 首先,我们来了解一下Shell编程的基本概念。在...

    B shell与 C shell的区别

    B shell与 C shell的区别 B shell和C shell都是Linux操作系统中的shell类型,它们之间存在一些关键的区别。 首先,让我们从B shell开始。B shell,全称为Bourne shell,是UNIX最初使用的shell。它在每种UNIX上都...

    实践大师:Unix Shell编程篇

    在IT领域,Unix Shell编程是一种极其重要的技能,尤其对于系统管理员和开发者来说,它既是工具又是脚本语言。本文将深入探讨Unix Shell编程的核心概念、语法特性以及实用技巧,帮助你成为一位熟练的Shell编程实践...

    实践大师:unix shell编程篇

    例如,`files=("file1.txt" "file2.txt")`创建了一个数组,然后可以通过索引访问,如`echo ${files[0]}`。 在处理文件和目录时,通配符是常用的工具。`*`匹配任何字符序列(包括空字符),而`?`匹配单个任意字符。...

    shell脚本基础篇思维导图

    shell脚本基础篇思维导图

    shell基础十二篇和shell十三问

    "shell基础十二篇"和"shell十三问"是针对初学者的经典教程,涵盖了从基本概念到实际应用的诸多方面。 **一、Shell介绍** 1. Shell类型:常见的有Bash(Bourne-Again SHell)、Sh、Csh、Ksh和Zsh等,其中Bash是最...

    Linux系统下的shell编程入门篇

    Linux系统下的shell编程入门篇 一、简介 在Linux系统中,shell编程是一种非常重要的技术,能够帮助我们高效地完成任务。在本篇文章中,我们将从基本概念开始,逐步深入到shell编程的各个方面。 首先,shell是什么...

    shell shell练习 shell入门

    本篇文章将深入探讨Shell的基础知识,包括其概念、重要性、基本语法以及如何进行Shell编程练习。 一、Shell简介 Shell是一个用户与操作系统之间的接口,它接受用户输入的命令并解析成操作系统可以理解的语言,然后...

    Shell基础十二篇打印美化版

    在"Shell基础十二篇"中,我们将会深入探讨一系列关于Shell的基础知识,这些内容涵盖了文件安全与权限、查找技巧、后台操作、输入/输出、文本过滤工具、awk、sed、文件分类与合并等多个方面。 首先,文件安全与权限...

    Shell脚本编程基础篇思维导图

    SHELL是UNIX系统的用户与操作系统之间的一种接口。...在Shell编程基础篇详细介绍了环境和变量、字符串处理、数组、注释、参数传递、基本运算符、选择循环的流程控制、函数、输入/输出重定向、文件格式等。

    Shell编程中文手册.pdf

    本手册涵盖了 Shell 编程的基础知识,包括 Shell 概述、Shell 解析器、Shell 脚本入门、Shell 中的变量等。 Shell 概述 Shell 是一种命令行接口,允许用户与操作系统进行交互。学习 Shell 编程可以让开发者更好地...

    Shell源码(Shell源码)

    Shell是Unix和Linux操作系统中的命令解释器,它提供了一个用户与操作系统内核交互的界面,允许用户通过输入命令来执行系统功能。Shell不仅是一个命令行接口,还是一个强大的编程语言,用户可以编写脚本来自动化一...

    Shell基础——Shell入门资料

    这篇“Shell基础”资料为初学者提供了全面的Shell入门指南,帮助你掌握这一强大的工具。 1. **什么是Shell?** Shell是Linux系统中的一个程序,它提供了一个交互式环境,让用户通过文本命令来控制计算机。常见的...

    shell变量与创建子shell详解

    Shell脚本是一种强大的编程工具,它在Unix和Linux操作系统中广泛应用于自动化和任务调度。在Shell脚本中,创建子Shell是一种常见的操作,它可以提供一个隔离的执行环境,使得在其中执行的命令和脚本不会影响到父...

Global site tag (gtag.js) - Google Analytics