在 Shell 编程中,$UID 是一个全局变量用于表明当期的用户 ID,如果是 0 表明是 root 用户。
在 Linux 中,清空日志有三种方式,第一种是使用 cat 命令,命令如下:
cat /dev/null > xxx.log
第二种是使用 echo 命令,命令如下:
echo "" > xxx.log
最后一种是使用重定向,命令如下:
> xxx.log
UNIX/LINUX 中主要有两大类 Shell,即:
查看当前 shell,使用如下命令:
echo $SHELL
Shell 编程的第一行代码:
#!/bin/bash
放在第一行才管用,放在下面就是注释了,相应的语言的开头标识内容:
#!/bin/sh
#!/bin/bash
#!/usr/bin/awk
#!/bin/sed
#!/usr/bin/tcl
#!/usr/bin/expect
如果脚本开头不指定解释器,那么,就要用对应的解释器来执行脚本,例如:
bash test.sh python test.py
当 shell 脚本以非交互方式运行时,它会先查找环境变量 ENV。该变量指定了一个环境文件(通常是 .bashrc),然后从该关键变量文件开始执行,当读取了 ENV 文件后,SHELL 才开始执行 shell 脚本中的内容。
shell 脚本的执行通常可以采用以下三种方式:
bash script-name 或 sh script-name(推荐使用,在脚本没有执行权限时也通常这样用) path/script-name 或 ./script-name(当前路径下执行脚本) source script-name 或 . script-name
如果在 shell 中定义了一个变量,用 “.” 执行 shell 这个变量会被传递到命令行:
命令 | 说明 |
---|---|
env 或 set | 显示环境变量 |
unset | 取消环境变量 |
如果想设置环境变量,就要在给变量赋值之后或设置变量时使用 export 命令。带 -x 选项的 declare 内置命令也可以完成同样的功能。
命令 | 说明 |
---|---|
echo “$HOME” | 输出 /home/haicoder |
echo ‘$HOME’ | 输出 $HOME |
定义变量有三种方式:
脚本函数中的变量称为局部变量,要以 local 方式进行声明,使之只在本函数作用于有效,防止变量在函数中的命名与外部程序中变量重名造成程序异常。
变量 | 说明 |
---|---|
$0 | 获取当前执行的 shell 脚本的文件名,包括脚本路径 |
$n | 获取当前执行的 shell 脚本的第 n 个参数值,当 n 为 0 时表示脚本的文件名 |
$* | 获取 shell 的所有参数,将所有的命令行参数视为单个字符串,相当于 “$1$2$3”, 注意与 $# 区别 |
%# | 获取当前 shell 命令行中参数的总个数 |
#@ | 所有程序的所有参数 “$1” “$2” “$3” “$4”,这是将参数传递给其他程序最佳方式。因为他会保留内嵌在 每个参数的空白 |
变量 | 说明 |
---|---|
$$ | 获取当前 shell 的进程号(PID) |
$! | 执行上一个指令的 PID |
$? | 获取执行上一个指令的返回值(0 为成功,非零为失败) |
$_ | 在此之前执行的命令或脚本的最后一个参数 |
{#string} 返回string的长度
{string:position} 在string中,从位置postion之后开始提取子串
{string:postion:length} 在string中,从位置postion之后开始提取长度为length的子串
{string#substring} 从变量string开头开始删除最短匹配substring子串
{string##substring} 从变量string开头开始删除最长匹配substring子串
{string%substring} 从变量string结尾开始删除最短匹配substring子串
{string%%substring} 从变量string结尾开始删除最长匹配substring子串
{string/substring/replace} 使用replace.来代替第一个匹配的substring,
{string/#substring/replace}如果string前缀匹配substrng.就用replace来代替来代替匹配{string/%substring/replace}如果string后缀匹配substring,就用replace来代替匹配substring
renmae .JPG .htm *.JPG #把当前目录下所有的JPG后缀的文件改成htm
{value:-word} 如果变量名存在且非null,则返回变量的值。否则,返回word字符串
{value:=word} 如果变量名存在且非null,则返回变量的值。否则,设置这个变量值为word,并返回值
{value:? "not defined"} 如果变量名存在且非null,则返回变量的值。否则显示变量名:message,并推出当前的命令或脚本
{value:+word} 如果变量名存在且非null,则返回word,否则返回null
{#chars} (效率最高)
chars | wc -m
chars")
n**m n的m次方
(()) 用于执行简单的整数运算,很常用,且效率高,只需要将特定的算术表达式用"$((“和”))"括起,不支持小数运算
let 赋值表达式 功能等同于 ((赋值表达式))
i=2
let i=i+8
echo $i #10
expr命令一般用于整数值,但也可以用于字符串,用来求表达式变量的值,同时expr也是一个手工命令行计算器
expr 2 + 3 #数字和运算符之间必须加空格
或者 expr $[2+4]
read -p “Please input a number:” a
expr $a + 0 &>/dev/null
[ $? -eq 0 ] && echo int || echo chars
echo “scale=2; 5.23/3.13” | bc
echo “obase=2;8” | bc #把8转成2进制
read
-p 设置提示信息
-t 设置输入等待时间,单位为秒