本章学习内容:

  • 1.常见符号
  • 2.命令分隔符-分号";"
  • 3.双分号 ";;"
  • 4. '单引号和"双引号
  • 5.`反引号和$()
  • 6.${}和$
  • 7.冒号:
  • 8.()小括号
  • 9.(())双括号
  • 10.{}大括号
  • 11.[]和[[]]之间的条件测试区别
  • 12.~波浪号
  • 13.延时
  • 14.变量赋值的注意
  • 15 printf命令使用

1.常见符号

  • $0   当前脚本的文件名
  • $n        传递给脚本的参数n,比如$1表示第一个参数
  • $#        传递给脚本或函数的参数个数。
  • $*,$@  传递给脚本或函数的所有参数
  • $?        上个命令的退出状态,或函数的返回值。
  • $$         当前Shell脚本所在的进程ID

示例:

#!/bin/bash

for var in $*
do
echo "$var" #for循环打印所有参数
done

2.命令分隔符分号";"

  • 作用:可以在同一行上写两个或两个以上的命令

示例:

if [ "$filename" == "$1" ]; then     #执行两条命令
echo "File $filename exists.";fi

3.双分号;;

  • 作用:用在case语句,类似于C里面的case,用来承担break作用

shell的case语法如下所示:

case "变量" in
"变量1")
...
;; #这里的双分号类似于break
"变量2")
...
;;
*) #匹配剩下的变量n
...
;;
esac #case结束语句

示例:

#!/bin/base

variable=xyz

case "$variable" in
abc) echo "\$variable = abc" ;;
xyz) echo "\$variable = xyz" ;;
esac

打印:

4. '单引号和"双引号

  • 单引号:  将会阻止所有特殊字符的解释,被单引号括住的内容都是普通字符串
  • 双引号: 引号包围起来的字符串,部分特殊字符将起到它们的作用

示例:

#!/bin/bash

a="this is a"
b="this is b" echo '${a}'
echo "${b}"

打印:

${a}
this is b

5.`反引号和$()

  • 都是用来实现命令替换的,可以通过这个将命令的输出赋值到一个变量中去

示例:

echo $(date "+ %Y/%m/%d %H:%M:%S")     #运行date命令
echo `date "+ %Y/%m/%d %H:%M:%S"` #运行date命令
c=$(echo hello) #打印: c=hello

6.${}和$

  • 都是变量替换,不过${}的好处在于,可以精确变量名称(也可以实现字符串替换等,下章来学习)

比如:

A=

echo $AB      #错误,将打印空的一行,因为运行时默认会去找变量值AB的解释
echo ${A}B #正常打印:123B

7.冒号:
空命令,一个什么都不干的命令,该命令的返回值为0(true).
示例如下:

:
echo $? # 打印上个命令的返回值,为0

由于冒号的返回值为0,所以可以通过>将一个文件清空,但是不会修改该文件权限

示例如下:

: > data.xxx         #如果该文件不存在,则会创建, 与cat /dev/null >data.xxx的作用相同

8.()小括号

8.1当用作命令组时
()会启动一个子shell顺序运行,需要注意的是, 由于()里的变量位于子shell中,并不是当前shell中,所以退出()后,变量还是不会变的
示例:

a=
(a=; echo "a = $a") #打印a=2
echo "a = $a" #打印a=1,说明变量a并没有改变

8.2当用作初始化数组时
示例-遍历数组: 

arr=(  )             #等价于array[0]=1 array[1]=2 array[2]=3

for(( i=;i<${#arr[@]};i++))
do
echo ${arr[i]};
done;

8.3当用作命令替换时
示例:

echo $(date "+ %Y/%m/%d %H:%M:%S")    #运行date命令

9.(())双括号

9.1用于for循环时
示例:

for(( i=;i<;i++));do
echo $i;done

9.2转换运算进制时,可以通过(())将任意数据转为10进制
示例:

echo $((#ff))    #打印255

9.3 用于整数判断时
示例:

if (("$a" < "$b"))
if (("$a" <= "$b"))
if (("$a" > "$b"))
if (("$a" >= "$b"))

10.{}大括号
10.1当用做代码块时
像一个匿名函数,但是{}里的变量对其它代码来说是可见的, 并且不会开启新的子shell
示例1:

a=
{
a=
echo "a = $a" #打印a=2
}
echo "a = $a" #打印a=2,说明已被修改

示例2-写入文件:

#!/bin/bash
{
echo 'hello'
echo 'this is test file'
echo 'end'
} > ./test

效果:

10.2当用做遍历时
示例:

echo {..}        #打印1 2 3 4 5 6 7 8 9 10
for var in {a..z}
do
echo $var #打印a~z字母
done

10.3也可以用作字符变量截取替换时
未完待续,在下一章将学习.

11.[ ]和[[]]之间的条件测试区别
11.1 [ ]的参数有以下几种

  • -z: 判断字符串长度为0则为真
  • -n: 判断字符串长度非0则为真
  • -o: 或
  • -a: 与
  • -x: 可执行
  • -r:  可读
  • -w: 可写

11.2当用作文件判断时,有以下几种参数:

  • -e filename  :如果 filename存在,则为真
  • -d filename  :如果 filename为目录,则为真
  • -f filename   :如果 filename为常规文件,则为真
  • -L filename  : 如果 filename为符号链接,则为真
  • -r filename   :如果 filename可读,则为真
  • -w filename  :如果 filename可写,则为真
  • -x filename  :如果 filename可执行,则为真
  • -s filename  :如果文件长度不为0,则为真
  • -h filename  :如果文件是软链接,则为真  
  • filename1 -nt filename2 :如果 filename1比 filename2新,则为真。
  • filename1 -ot filename2 :如果 filename1比 filename2旧,则为真。

示例-检查当前目录的test文件是否存在:

#!/bin/bash

testfile="${PWD}/test"

if [ -e "$testfile" ];then
echo " $testfile is exist"
fi

11.3 在比较整数时,都使用-eq -ne –gt –ge –lt -le等
示例:

//-eq 判断等于(equal)
if [ "$a" -eq "$b" ] //-ne 判断不等于(no equal)
if [ "$a" -ne "$b" ] //-gt 大于(greater than)
if [ "$a" -gt "$b" ] //-ge 大于等于
if [ "$a" -ge "$b" ] //-lt 小于(less than)
if [ "$a" -lt "$b" ] //-le 小于等于
if [ "$a" -le "$b" ]

11.4比较字符串时,只能使用!=和=,如果使用大于小于时,则需要加 \ 转义
示例:

a="abcde"
b="abc" if [ -n "$a" -o "$a" \> "$b" ] #判断a非0,且a>b
then
echo "a > b"
fi

11.5而[[]]也能适用于整数和字符串,而且对于整数或者字符串而言,它们都可以支持&&、||、<和>、!=、==
示例:

a=
b=
c="abc"
e="abcd" if [[ "$a" == "$b" && "$c" < "$e" ]]
then
echo "a = b,c < e"
fi

12.~波浪号

  • ~    为home目录
  • ~+  为当前目录,等价于$PWD

示例:

A=~
B=~+
echo $A #打印home目录
echo $B #打印当前目录

13.延时

  • 在shell中,延时使用sleep命令

示例:

sleep      #延时1秒
sleep 0.5 #延时0.5秒
sleep 1m #睡眠1分
sleep 1h #睡眠1小时

14.变量赋值时的注意

  • 如果变量里存在空白,则必须加上引用

示例:

a=   3     #将会出错,正确的用法应该是a="1 2 3"

15 printf命令使用

  • 在shell中可以通过printf来获取/打印数据的格式

使用示例1:

printf %d 0xF    //16进制转换成10进制

printf %x    //10进制转换成16进制
f printf %o //10进制转换成8进制

示例2-随机获取一串12位的十六进制数:

#!/bin/bash

# 每次调用$RANDOM都会返回不同的随机整数.
# 一般范围为: 0 - 32767 (有符号的16-bit整数). hwadr=""
for(( i=; i<; i++ ));do
hw[i]=$(($RANDOM%));
a=$(printf %x ${hw[i]})
hwadr=${hwadr}${a}
done echo $hwadr

效果如下所示-每次运行则打印不同数据:

1.shell学习之常用语句的更多相关文章

  1. mysql学习一 常用语句

    操作系统为windows  1 启动关闭mysql服务 //windows mysqld --console //开启mysql服务 mysqladmin -uroot shutdown //关闭my ...

  2. shell学习之常用命令总结

    1.find命令 主要用途:主要用来做文件查找. 使用方法:查找文件的方式可以基于:文件名,文件时间属性,文件的所有者和组,文件权限属性,文件类型属性,文件大小,另外可以指定 查找目录的深度,排除指定 ...

  3. shell 学习之if语句

    bash中如何实现条件判断?条件测试类型:    整数测试    字符测试    文件测试 一.条件测试的表达式:    [ expression ]  括号两端必须要有空格    [[ expres ...

  4. [基础学习]MySQL常用语句命令总结

    前言 相信平时大家在开发时都会使用MySQL数据库,它是目前比较火的一款数据库工具,对于大多数企业的业务来说,MySQL可以很完美地支持了. 很多时候我们都是借助mysql可视化工具操作mysql,虽 ...

  5. SQL数据库学习,常用语句查询大全

    数据库学习 sql server数据库基本概念 使用文件保存数据存在几个缺点: 1.文件的安全性问题: 2.文件不利于查询和对数据的管理: 3.文件不利于存放海量数据 4.文件在程序中控制不方便. 数 ...

  6. shell 学习笔记5-shell-if语句

    一.if条件语句 1.语法 1)单分支结构 第一种 if <条件表达式> then 指令 fi 第二种 if <条件表达式>:then 指令 fi 上文的"<条 ...

  7. Shell学习笔记 - 分支语句

    一.单分支if语句 1. 语法格式 if [ 条件判断式 ]; then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi 注意:中括号和条件判断式之间必须有空格 2. 示例1:判断登 ...

  8. shell学习之常用技巧

    cut 切割,-d分隔符,-f指定段号,-c指定第几个字符.d,f用的多些. sort排序,-n按照数字排序,-r反排序. wc -l 查看文件行数. 大道至简,掌握常用的命令就可以了. uniq去重 ...

  9. python学习_常用语句

    1.变量 1 name='hu qihang' #变量名应为英文,方便阅读 2 name_of_gf='chen ye' #多个单词用下划线隔开 3 名字='hu qihang' #变量名可以是中文 ...

随机推荐

  1. JVM运行时数据区(二)

    4.本地方法栈 本地方法栈与虚拟机栈所发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为虚拟机使用到的Native方法服务. 与Java虚拟机栈一样本地 ...

  2. 背水一战 Windows 10 (115) - 后台任务: 通过 toast 激活后台任务, 定时激活后台任务

    [源码下载] 背水一战 Windows 10 (115) - 后台任务: 通过 toast 激活后台任务, 定时激活后台任务 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 通 ...

  3. 2.抽取代码(BaseActivity)

    知识点 俩种退出程序的方法 复制集合 同步的用法 字符数组 工厂模式,生产fatgment,解决了碎片重复创建的问题 全局上下文 actionbar用法 fargmentadapter,当viewpa ...

  4. JavaScript中的日期时间函数

    1.Date对象具有多种构造函数,下面简单列举如下 new Date() new Date(milliseconds) new Date(datestring) new Date(year, mont ...

  5. C 线性表的链式存储实现及插入、删除等操作示例

    一.链式存储的优势 线性表的存储可以通过顺序存储或链式存储实现,其中顺序存储基于数组实现(见本人上一篇博客),在进行插入删除等操作时,需对表内某一部分元素逐个移动,效率较低.而链式结构不依赖于地址连续 ...

  6. 微信小程序快捷键(Mac和windows)

    最近因为有点闲暇时间,所以抽空简单了解了小程序,因为小程序是使用微信开发者工具编码,不能使用其它编辑器,比如,Sublime,Hubilder等. 所以就百度了一下小程序快捷键,但总觉得不全,所以就去 ...

  7. SpringBoot中集成redis

    转载:https://www.cnblogs.com/zeng1994/p/03303c805731afc9aa9c60dbbd32a323.html 不是使用注解而是代码调用 需要在springbo ...

  8. Python图像处理库PIL中图像格式转换

    o 在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现.本文基于这个需求,使用python中的图像处理库PIL ...

  9. Ubuntu18.04下配置Nginx+RTMP服务器,实现点播/直播/录制功能

    2019.3.22更新 最新的nginx-1.15.9可与openssl1.1.1兼容了 以下原文: 这个东西我眼馋挺久了,最近终于试玩了一下,感觉很好玩,在搭建的过程在也遇到一些坑,这里总结一下 安 ...

  10. MngoDb MongoClientOptions 配置信息及常用配置信息

    MongoClientOptions.Builder addClusterListener(ClusterListener clusterListener)Adds the given cluster ...