shell基础之符号与语法
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基础之符号与语法的更多相关文章
- shell 基础语法
shell 基础语法 =============================================== 推荐:http://c.biancheng.net/cpp/shell/ ==== ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- Linux基础学习(10)--Shell基础
第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...
- Linux Shell基础(下)
Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...
- Linux shell基础知识(上)
Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...
- 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配置文件 ...
- shell基础知识总结
1. shell 对于一台计算机而言,其硬件受系统内核的控制,使用者想要控制计算机,就必须有与系统内核进行通讯的手段.而shell就是使用者与计算机进行通讯的手段之一.从命名上看,shell其实是相对 ...
- linux shell 基础 使用日志与心得
linux shell 基础 使用日志与心得 1.#!/bin/bash 第一行就出现#!/bin/bash是指此脚本使用/bin/bash来解释执行.其中,#!是一个特殊的表示符,其后,跟着解释此脚 ...
- [转帖]编写shell脚本所需的语法和示例
编写shell脚本所需的语法和示例 https://blog.csdn.net/CSDN___LYY/article/details/100584638 在说什么是shell脚本之前,先说说什么是sh ...
随机推荐
- 时间格式化函数strftime
#include <time.h> #include <stdio.h> #include <string.h> int main() { char ti ...
- Python下opencv使用笔记(一)(图像简单读取、显示与储存)
写在之前 从去年開始关注python这个软件,途中间间断断看与学过一些关于python的东西.感觉python确实是一个简单优美.easy上手的脚本编程语言,众多的第三方库使得python异常的强大. ...
- Objective-C_类的扩展
一Category的定义和使用 二Extension的定义和使用 三Protocol的定义和使用 delegate的使用 一.Category的定义和使用 Category,分类或类目.主要作用是为没 ...
- jquery13 attr() prop() val() addClass()等 : 对元素属性的操作
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- android-从官网下拉源码(ubuntu)
今天终于成功的从谷歌官网上下载了android 源码.中间折腾了好久,最终总算有所收获 1.下载repo curl https://storage.googleapis.com/git-repo-do ...
- 10.cocos2d坐标系
一.笛卡儿坐标系 OpenGl坐标系为笛卡儿右手系.x向右,y向上,z向外.在cocos2d-lua中坐标系原点在屏幕的左下角,x向右,y向上,z则是指的zorder(层级). 二.世界坐标系,本地坐 ...
- 用AOP改善javascript代码
Aop又叫面向切面编程,用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点,这篇就通过下面这几个小例子,来说说AOP在js中的妙用. 1, 防止window.onloa ...
- SASS常用方法
cnpm install --save-dev sass-loader //sass-loader依赖于node-sass cnpm install --save-dev node-sass //实现 ...
- Activemq去除认证
0.背景介绍 由于项目安全性的约束,不能在配置文件中暴露一些密码信息. 默认情况下,ActiveMQ在进行接发消息的时候会用户认证.通过ActiveMQ-client初始化ActiveMQConn ...
- 【Mysql】将Excel表导入至Mysql的当中一张表
如果表格有A(整型字段).B(整型字段).C(字符串数据)三列数据,希望导入到Mysql中数据库中表格table.table中须要插入的字段各自是col1,col2,col3 1.在随意一列,如果在D ...