分类
Bash Linux

怎样用 Bash 编程:循环

我使用过的所有编程语言都至少有两种循环结构来用来执行重复的操作。我经常使用 for 循环,然而我发现 while 和 until 循环也很有用处。

for 循环

我的理解是,在 bash 中实现的 for 命令比大部分语言灵活,因为它可以处理非数字的值;与之形成对比的是,诸如标准 C 语言的 for 循环只能处理数字类型的值。

Bash 版的 for 命令基本的结构很简单:

for Var in list1 ; do list2 ; done

解释一下:“对于 list1 中的每一个值,把 $Var 设置为那个值,使用该值执行 list2 中的程序语句;list1 中的值都执行完后,整个循环结束,退出循环。” list1 中的值可以是一个简单的显式字符串值,也可以是一个命令执行后的结果(“ 包含其内的命令执行的结果,本系列第二篇文章中有描述)。我经常使用这种结构。

分类
Bash

怎样用 Bash 编程:逻辑操作符和 shell 扩展

逻辑操作符是程序中进行判断的根本要素,也是执行不同的语句组合的依据。有时这也被称为流控制。

逻辑操作符

Bash 中有大量的用于不同条件表达式的逻辑操作符。最基本的是 if 控制结构,它判断一个条件,如果条件为真,就执行一些程序语句。操作符共有三类:文件、数字和非数字操作符。如果条件为真,所有的操作符返回真值(0),如果条件为假,返回假值(1)。

这些比较操作符的函数语法是,一个操作符加一个或两个参数放在中括号内,后面跟一系列程序语句,如果条件为真,程序语句执行,可能会有另一个程序语句列表,该列表在条件为假时执行:

if [ arg1 operator arg2 ] ; then list
或
if [ arg1 operator arg2 ] ; then list ; else list ; fi

像例子中那样,在比较表达式中,空格不能省略。中括号的每部分,[ 和 ],是跟 test 命令一样的传统的 Bash 符号:

if test arg1 operator arg2 ; then list

还有一个更新的语法能提供一点点便利,一些系统管理员比较喜欢用。这种格式对于不同版本的 Bash 和一些 shell 如 ksh(Korn shell)兼容性稍差。格式如下:

if [[ arg1 operator arg2 ]] ; then list
分类
Linux

怎样用 Bash 编程:语法和工具

Shell 是操作系统的命令解释器,其中 Bash 是我最喜欢的。每当用户或者系统管理员将命令输入系统的时候,Linux 的 shell 解释器就会把这些命令转换成操作系统可以理解的形式。而执行结果返回 shell 程序后,它会将结果输出到 STDOUT(标准输出),默认情况下,这些结果会显示在你的终端。所有我熟悉的 shell 同时也是一门编程语言。

Bash 是个功能强大的 shell,包含众多便捷特性,比如:tab 补全、命令回溯和再编辑、别名等。它的命令行默认编辑模式是 Emacs,但是我最喜欢的 Bash 特性之一是我可以将其更改为 Vi 模式,以使用那些储存在我肌肉记忆中的的编辑命令。

分类
Windows

批处理文件中的 %~d0

批处理,%~d0 cd %~dp0 代表什么意思?

~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录。语法选项:

~0         - 删除任何引号("),扩充 %0
%~f0        - 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件)
%~d0        - 仅将 %0 扩充到一个驱动器号
%~p0        - 仅将 %0 扩充到一个路径
%~n0        - 仅将 %0 扩充到一个文件名(“n”是name 文件名)
%~x0        - 仅将 %0 扩充到一个文件扩展名
%~s0        - 扩充的路径只含有短名(“s”为Short,短的)
%~a0        - 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
%~t0        - 将 %0 扩充到文件的日期/时间(“t”time)
%~z0        - 将 %0 扩充到文件的大小(Size 大小)
%~PATH:0    −查找列在路径环境变量的目录,并将PATH:0 - 查找列在路径环境变量的目录,并将 %I 扩充
              到找到的第一个驱动器号和路径。
%~ftza0     - 将 %0 扩充到类似输出线路的 DIR

%0为当前批处理文件,如果0换成1为第一个文件,2为第2个

分类
Windows 笔记

Windows批处理命令之Start

在Windows下执行批处理脚本会打开一个黑乎乎的控制台窗口,任务未执行完成时窗口不会关闭。

编写一个打开软件的脚本,软件未退出时,启动bat脚本的窗口不会被关闭。使用start命令启动,可以实现命令窗口自动关闭。start命令说明:

bat脚本如下:

@echo off

set CURRENT_DIR=%cd%

start "google-chrome" "%CURRENT_DIR%\chrome" --user-data-dir="%CURRENT_DIR%\UserData\qizheng@myid01.com"

保存为Chrome.bat

windows执行bat脚本,都会打开命令窗口,即使自动退出,也会有个黑框一闪而过。使用vbs脚本执行脚本可以隐藏控制台。如下:

set ws=WScript.CreateObject("WScript.Shell") 
ws.Run ".\Chrome.bat",0

保存为vbs,双击可执行。

在这里应该看得出来了,我写的脚本是打开Chrome浏览器,并指定用户数据目录。