Linux——Shell编程入门

定义

Shell脚本,是一种为shell编写的脚本程序,一般文件后缀为.sh

运行

赋予文件可执行权限

chmod file_path

指定脚本解释器

#! /bin/sh 或者 #!/usr/bin/env bash
#!向系统表示,其后路径指定的程序是解释该脚本文件的shell解释器

脚本文件

脚本文件的第一行必须指明运行该脚本的程序

基本语法

注释

单行注释:#
多行注释::<

echo 字符串输出

注意字符串可以使用单双引号,但是单引号内不可以识别变量
echo “hello, world” # hello, world
echo “hello, “zp”” # hello, “zp” 字符串中包含引号,用\转移
echo -e “Yes\nNo” # Yes
No -e作用是开启转义,否则输出Yes\nNo;\n表示换行,\c表示不换行
name = zp
echo “hello, ${name}” # hello, zp ${varible} 可以输出变量

echo “str” > file_name # 输出重定向

printf

printf format arg1 arg2
例子,printf “%d %s\n” 1 “abc” # 1 abc
需要注意的是,格式即使只指定一个参数,多余的参数也会按照指定的格式输出;
也可以使用格式化输出,类似C语言

read

read -[pstnd] var1 var2
若是read后有变量名,则将输入数值输入到变量当中;否则,输出到$REPLY
-p 提示语句,例子 read -p “text” var1 var2 … ,text为提示语句
-s 屏蔽回显,例子 read -s pwd,不显示用户的输入
-t 等待时间,例子 read -t sec name ,指定等待时间为5秒
-d 输入分界
-n 确定参数个数

ln命令

ln [参数] [源文件或者目录] [目标文件或目录]

ln命令的作用是:为某一个文件在另外的位置创建一个同步的链接,目的是在不同的目录下访问相同的文件时,不必再每个目录下都放一个相同的文件,可以节省磁盘空间

背景知识:
Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link)。
硬链接的意思是一个档案可以有多个名称,以文件副本的形式存在,但是不占用实际空间;
而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置,类似Windows操作系统中的快捷方式。
硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

命令参数:
-s # 创建软链接;参数缺省状态下,默认创建硬链接
-f # 强制ln命令替换掉已经存在的目的路径;与-n命令相对
-n # 如果链接文件已经存在,那么不覆盖文件的内容;参数缺省状态下默认不覆盖

变量

没有数据类型;无需提前声明,给变量赋值即会直接创造变量

变量创建

word = “hello” # 直接创建变量
word = command 或者 word = $(command) # 将命令的结果赋值给变量

变量访问

v a r 或 者 {var} 或者 varvar
例子,echo ${word} # hello

变量删除

unset word
echo ${word} # (空)

变量只读

readonly word
不可修改,不可以由unset删除

变量替换

即发生某种条件时对于变量进行替换,替换条件放在{}当中。
${var:-word} # 变量未定义或者值为空时,返回值为word的内容,否则返回变量的值
${var:=word} # 同:-,当变量未定义或者值为空时,将word的值赋值给变量,同时返回
${var:?error_message} # 当变量未赋值,程序终止运行,将error_msg送到标准错误输出;否则正常替换
${var:+word} # 当变量已经赋值,其值用word替换;否则不进行替换

${var:offset:length} # 从变量中提取子串
${#var} # 变量中的字符个数

控制语句

条件语句

[[ ]] 包起来的表达式被称之为检测命令或者是基元,帮助检测条件的结果
if [[ 语句1 ]]; then
pass
elif [[ 语句2 ]]; then
pass
else
pass
fi

循环语句

for循环
for arg in elem1, … elemn;
do
pass
done

while循环
while [[ condition ]];
do
pass
done

函数

函数定义

[ function ] funname [()] {
action;
[return int;]
}
函数返回值只能是整数;若是不加return语句,默认返回最后一条命令的运行结果
函数使用前必须首先定义,否则会报错

函数调用

funname [arg]

函数返回值调用

$? 直接在函数运行后调用即可

函数位置参数

所谓的位置参数是在调用一个函数并传给它参数时创建的变量。
$0 脚本名称
$num 第num个参数列表
$* 或者 $@ 除$0之外的所有位置参数
$# 不包括$0在内的位置参数的个数
$FUNCNAME 函数名称

你可能感兴趣的:(Linux)