shell脚本如今已经成为了一种非常普遍的脚本语言,之所以如此广泛的被应用,毋庸置疑它是有它的独到之处的。shell脚本语言和其它的语言比方说c/c++有何不同呢?c/c++等语言属于编译型语言。也就是说程序每次运行前都要经过编译生成可运行的二进制文件方可;而shell属于解释型语言。它必须依赖解释器来逐行解释命令,如今我们所熟知并经常使用的解释器为bash解释器。所以以后学习使用一门解释型语言的时候。不可缺少的是首先得下载一个解释器。以下就来看一个简单的shell脚本:

#! /bin/bash
int_val=312
char_val='a'
float_val=3.12
string_val="aaaaaa"
echo $int_val
echo $char_val
echo $float_val
echo $string_val
echo $int_val'+'$char_val'+'$string_val'+'$float_val'
echo ${char_val}a$int_val

运行结果例如以下:


       由上图运行结果能够看出:我们所依赖的解释器就是bash,同一时候shell脚本中定义使用变量而且连接几个不同的变量远比我们使用c/c++实现方便多了!

 

        shell脚本中规定:变量使用前不须要定义类型,须要使用的变量由用户自己定义 。shell脚本下默认全部的变量均为字符串类型,所以我们就能够依据自己的需求进行字符串的连接,如上代码所看到的。连接过程中仅仅须要使用‘+’号或须要的字符就可以。

以下详细从shell的符号和shell的语法来学习记忆。

一.shell符号

1.当你写好一个shell标本后,如何无运行这个脚本的到自己所须要的结果呢?

答:有几种方法:(1)给脚本加上可运行的权限:chmod +x +文件名称 ,然后运行 ./+文件名称就可以

                                (2)/bin/bah +文件名称

                                (3)source ./+文件名称

                                 (4) . ./+文件名称

2.shell中有哪些变量呢?

答:按类型能够分为本地变量和环境变量,能够使用env查看当前系统中的全部环境变量。而本地变量仅仅存在于当前shell进程中,我们能够使用set命令来查看当前shell进程中全部的变量(包含本地变量和环境变量)。

这里与举一个样例:

(1)在当前shell中定义一个变量:value=100(注意这里等号两边都不能有空格。不然会被shell解释成命令和命令行參数)

(2)使用export能够导出这个变量到环境变量中

(3)使用env查看该命令就可以

例如以下图所看到的

(4)使用unset能够删除已定义的环境变量或者本地变量

3.shell怎引用变量?

答:如刚開始举得样例一般,定义变量不须要类型,取变量的值时仅仅需使用$+变量名就可以

4.我们怎么拿到本文件夹下全部符合条件的呢?

答:在这里。我们就提到了通配符,常见的通配符有:*、?

、[],分别解释例如以下:

(1)*:匹配0或者多个随意字符

(2)?:匹配一个随意字符

(3)[]:匹配方括号里随意一个字符的一次出现

样例例如以下:


5.如何使用命令代换?

答:命令代换就是shell先运行符号内的命令,然后将输出结果马上代换到当前命令行中。

例如以下样例:

#! /bin/bash
DATE=`date`
echo $DATE

#! /bin/bashDATE=$(date)echo $DATE

上面两段程序的运行结果例如以下:

6.转义字符在建立文件的时候怎么使用?

答:一般文件名称随用户定义。但当你想touch一个名为$ $的文件的时候,转移字符就派上用场了。

7.shell脚本中的单引號和双引號有共同点?

答:shell脚本中,单引號和双引號都仅仅是保持字符的字面意思,也就是说不正确字符的内容进行解释。

二.shell基本的语法

1.条件測试 

c语言中条件推断用的是if语句,而在shell脚本中,经常使用的两种条件測试命令时test和[.測试结果为真返回0。为假返回1(与语言的返回条件刚好相反)。以下是一些測试样例:

(1)

#! /bin/bash
read val
test $val -gt 10
echo $? [ $val -gt 10 ]
echo $?

运行结果例如以下:

当然除使用命令測试之外,命令也能够增加參数进行推断:

(2)

#! /bin/bash
read input
[ -d $input ]
echo $?
[ -f $input ]
echo $?
[ -z $input ]
echo $? [ -n $input ]
echo $?</span>

运行结果例如以下:

(3)字符串的推断

#! /bin/bah
str1="i am boy"
str2="t am gilr"
[ "X$str1" == "X$str2" ]
echo $?
一般字符串在做比較的时候。习惯在字符串中增加X防止空串出现

当然,測试命令之间还能够进行与或非逻辑运算。上面所比較的字符串的方法就是当中的一个样例

使用的语法为:[ 測试条件 -a 測试条件]

                          [!測试条件]

                          [ 測试条件  -o 測试条件]

#! /bin/bash
str1="i am a beautiful girl"
[ -f test.sh -a "X$str1" == "i am a beautiful girl" ]
echo $?

运行结果为1 。
2.if/then/elif/fi这个就相当于我们C语言中if语句,样例例如以下:

#! /bin/bash
read sex
if [ "Xsex" == "Xman" ];then
echo "you are a boy
elif [ "Xsex" == "Xwoman" ]
echo "you are a girl"
else
echo "say nothing"
fi

可是在这里,必须注意,if语句和fi之间不能有空语句,能够用:隔开,表示总是为真。样例例如以下:

#! /bin/bash
read input
if [ -d $input ];then
echo "$input is dir"
fi
if
: ;then
echo "/ is always true"
fi

除此之外,shell脚本还提供了&& 和||命令。它的作用相当于if...then  /if ...not then(样例例如以下)

#! /bin/bash
val=10
[ $val -eq 10 ] && {
echo "you are right"
exit 0
}
echo "not true" [ $val -eq 10 ] || {
echo "not true"
exit 1
}
echo "you are right“

3.case /esac它就相当于c语言中的switch语句。样例例如以下:

#! /bin/bash
read val
case $val in
a)
service iptables start
echo "start"
;;
b)
service iptables stop
echo "stop"
;;
c)
service iptables restart
echo "restart"
;;
esac

上述代码中的;;符号就类似于switch语句中的break。
4.循环语句,shell脚本下的循环语句与c语言的循环语句非常不同样,样例例如以下:

#! /bin/bash
for i in $@
do
echo "$i"
done
#! /bin/bash
for(( i=0; i<100; i++ ))
do
echo "$i"
done

当然另外一种方法就比較类似于c语言的写法啦!

5.while/ do/done,样例例如以下:

#! /bin/bash
echo "printf 1+1=? "
read val
while [ $val -eq 2 ]
do
echo "you are a smart man"
done

6.位置參数和特殊变量

(1)$0:表示命令行上可运行文件的文件名称

(2)$1、$2.....:表示命令行上的參数1,參数2 等等

(3)$@:表示參数列表

(4)$#:表示命令行參数的个数

(5)$?:表示当前进程的退出码

(6)$():表示命令替换

(7)$$:表示shell的进程号

7.函数:shell脚本中,函数一般先定义,定义的时候不写

參数和返回值,调用的时候仅仅需写出函数名就好。一般程序是从函数调用的地方运行的。

(样例例如以下

#! /bin/bash
function fool()
{
echo "smart"
}
fool

如上样例所看到的:shell脚本中是没有函数声明的,一般将函数定义能够写在脚本开头。

整个函数仅仅在以下条用的时候起作用。
8.数组:shell脚本如C语言一样也是支持顺序訪问下标元素的。一般在初始化数组元素的时候中间以空格隔开(样例例如以下)

#! /bin/bash
arr=("hello" 123 3.14)
i=0
for (( ; i<${#arr[@]}; ++i))
do
echo ${arr[$i]}
done


在上面这个样例中,表达式${#arr[@}是计算数组元素的个数的。模拟使用了C方式的书写格式,终于打印出来数组的元素。

shell基础之符号与语法的更多相关文章

  1. shell 基础语法

    shell 基础语法 =============================================== 推荐:http://c.biancheng.net/cpp/shell/ ==== ...

  2. Linux实战教学笔记17:精简shell基础

    第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...

  3. Linux基础学习(10)--Shell基础

    第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...

  4. Linux Shell基础(下)

    Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...

  5. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

  6. centos shell基础 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 nohup & 后台运行 cut,sort,wc ,uniq ,tee ,tr ,split, paste cat> 2.txt <<EOF 通配符 glob模式 发邮件命令mail 2015-4-8 第十二节课

    centos shell基础知识 alias  变量单引号 双引号   history 错误重定向 2>&1  jobs  环境变量 .bash_history  source配置文件 ...

  7. shell基础知识总结

    1. shell 对于一台计算机而言,其硬件受系统内核的控制,使用者想要控制计算机,就必须有与系统内核进行通讯的手段.而shell就是使用者与计算机进行通讯的手段之一.从命名上看,shell其实是相对 ...

  8. linux shell 基础 使用日志与心得

    linux shell 基础 使用日志与心得 1.#!/bin/bash 第一行就出现#!/bin/bash是指此脚本使用/bin/bash来解释执行.其中,#!是一个特殊的表示符,其后,跟着解释此脚 ...

  9. [转帖]编写shell脚本所需的语法和示例

    编写shell脚本所需的语法和示例 https://blog.csdn.net/CSDN___LYY/article/details/100584638 在说什么是shell脚本之前,先说说什么是sh ...

随机推荐

  1. CMDB学习之八,完成所有资产采集信息的收集

    #!/usr/bin/env python # -*- coding:utf-8 -*- import traceback from .base import BasePlugin from lib. ...

  2. Vue2.0八——知识点整理

    1.active-class是哪个组件的属性?嵌套路由怎么定义? 答:vue-router模块的router-link组件. 2.怎么定义vue-router的动态路由?怎么获取传过来的动态参数? 答 ...

  3. python程序转exe程序之一——cx_Freeze

    原始网页 : http://keliang.blog.51cto.com/3359430/661884 本人用的64位系统,一开始装了32位的cx_freeze,结果貌似无法自动找到本地的python ...

  4. OCP-1Z0-051-题目解析-第27题

    27. Which two statements are true regarding tables? (Choose two.)  A. A table name can be of any len ...

  5. 一入python深似海--对象的属性

    Python中一切皆是对象,每一个对象都能够有多个属性.Python是怎样管理这些属性呢?我们来探讨一下. 属性的__dict__系统 对象的属性包括两部分:类属性和对象属性.对象的属性可能来自于其类 ...

  6. java基本的语法

     Java语言发展史 课程大纲: Java语言发展史: 1.sun公司1995年推出,2009年Oracle公司收购sun: 下载: 1.到Oracle官网下载 Java体系与特点 课程大纲: J ...

  7. jquery13 attr() prop() val() addClass()等 : 对元素属性的操作

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  8. vim 基础学习之可视模式

    1. 选择模式这个模式必须通过可视模式进入.在可视模式下,我们通过 <C-g>来把我们的可视选中块作为选择模式下的操作块. 这时候我们输入可见字符,就会把这个块给覆盖掉.例如aaa bbb ...

  9. 【深入篇】Andorid中常用的控件及属性

    TextView  android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/phone/map/al ...

  10. wmic linux python

    sudo aptitude install wmi-client Example of usage is; wmic -U DOMAIN/administrator%password //10.99. ...