乙巳🐍年

acc8226 的博客

函数定义

shell 中函数的定义格式如下:

1
2
3
4
5
[ function ] funname [()]
{
action;
[return int;]
}

说明:

  • 可以带 function fun() 定义,也可以直接 fun() 定义,不带任何参数。
  • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return 后跟数值 n(0-255)

下面的例子定义了一个函数并进行调用:

阅读全文 »

变量定义

1.概念
变量的名字就是变量保存值的地方。引用变量的值就叫做变量替换。

如果 variable 是一个变量的名字,那么 $variable 就是引用这个变量的值,即这变量所包含的数据。

variable 事实上只是 variable事实上只是{variable} 的简写形式。在某些上下文中 variable 可能会引起错误,这时候你就需要用 variable可能会引起错误,这时候你就需要用{variable} 了。

2.定义变量
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: myname=“shiyanlou”

注意

变量名和等号之间不能有空格。同时,变量名的命名须遵循如下规则:

首个字符必须为字母(a-z,A-Z)。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用 bash 里的关键字(可用 help 命令查看保留关键字)。
除了直接赋值,还可以用语句给变量赋值,如:for file in ls /etc

阅读全文 »

清空日志

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

# 初始化一个变量
LOG_DIR=/var/log

cd $LOG_DIR

cat /dev/null > wtmp

echo "Logs cleaned up."

exit

cat /dev/null > wtmp 可以换为 : > wtmp
遇到权限不够的提示,为什么,如何解决?
权限不够加 sudo 啊,可是你会发现

sudo cat /dev/null > /var/log/wtmp 一样会提示权限不够,为什么呢?因为 sudo 只能让 cat 命令以 sudo 的权限执行,而对于>这个符号并没有 sudo 的权限,我们可以使用

sudo sh -c "cat /dev/null > /var/log/wtmp " 让整个命令都具有 sudo 的权限执行
为什么 cleanlogs.sh 可以将 log 文件清除?
因为/dev/null ,里面是空的,重定向到 /var/log/wtmp 文件后,就清空了 wtmp 文件的内容。

阅读全文 »

if else

和 Java、PHP 等语言不一样,sh的流程控制不可为空

在 sh/bash 里可不能这么写,如果 else 分支没有语句执行,就不要写这个else。

1.if

if 语句语法格式:

1
2
3
4
5
6
7
if condition
then
command1
command2
...
commandN
fi
阅读全文 »

一、注释(#)
行首以 # 开头(除#!之外)的是注释。#!是用于指定当前脚本的解释器,我们这里为bash,且应该指明完整路径,所以为/bin/bash

当然,在 echo 中转义的 # 是不能作为注释的:

1
vim test.sh

输入如下代码,并保存。(中文为注释,不需要输入)

1
2
3
4
5
6
#!/bin/bash
echo "The # here does not begin a comment."
echo 'The # here does not begin a comment.'
echo The \# here does not begin a comment.
echo The # 这里开始一个注释
echo $(( 2#101011 )) # 数制转换(使用二进制表示),不是一个注释,双括号表示对于数字的处理
阅读全文 »
0%