linux shell

1. ps

ps是一款显示系统进程状态的工具,类似于top,只不过top是实时的,而ps是静态的,也就是抓取系统进程的一个快照。

1.1 命令格式

ps -p [pid] -o [cloumn]

选项

选项描述
-p指定进程PID
-o指定显示列

1.2 查看进程CMD

[root@master-zeus ~]#ps -p $$ -o comm=
java

注意:$$表示当前进程PID,comm=表示获取进程启动命令

2. 变量

2.1 数组

Bash Shell只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。

2.1.1 语法

Shell数组用括号来表示,元素用"空格"符号分割开。

array_name=(value1 value2 ... valuen)

2.1.2 获取元素

索引读取元素

${array_name[index]}

读取所有元素

${array_name[@]}$array_name[@]

备注:下标为*@得到整个数组内容

2.1.3 数组长度

${#a[@]}

备注:下标为*@得到整个数组内容

2.1.4 删除

unset 数组[下标]

注意:不带下标,清除整个数组数据

2.1.5 分片

返回切片字符串

${数组名[@或*]:起始位置:长度} 

返回切片数组

(${数组名[@或*]:起始位置:长度}

对原数组进行切片,返回是字符串,中间用“空格”分开。如果加上"()",将得到切片数组

2.1.6 替换

${数组名[@或*]/查找字符/替换字符}

注意:该操作不会改变原先数组内容,如果需要修改,需要重新定义数据。

2.2 特殊变量

变量描述
$0当前脚本文件名
$n传递给脚本或函数的参数。n为数字,表示第几个参数。
$#传递给脚本或函数参数个数
$*传递给脚本或函数的所有参数
$@传递给脚本或函数的所有参数
$?执行上次命令的退出状态,或函数的返回值
$$当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID
$BASH_SOURCE表示脚本的第一个参数。如果第一个参数是bash,则自动转换为第二个参数

2.3 $*$@的区别

$*$@都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n"的形式输出所有参数。
但是,当它们被双引号(" ")包含时,"$*"会将所有参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@"会将各个参数分开,以"$1" "$2" … "$n"的形式输出所有参数。

#!/bin/bash
# 调用命令 cmd.sh a b c
# 输出$*和"$*"
# $*= a b c
# "$*"= a b c
echo "\$*=" $*
echo "\"\$*\"=" "$*"

# 输出$@和"$@"
# $@= a b c
# "$@"= a b c
echo "\$@=" $@
echo "\"\$@\"=" "$@"

# 循环输出$*
# print each param from $*
# a
# b
# c
echo "print each param from \$*"
for var in $*
do
    echo "$var"
done

# 循环输出$@
# print each param from $@
# a
# b
# c
echo "print each param from \$@"
for var in $@
do
    echo "$var"
done

# 循环输出"$*"
# print each param from "$*"
# a b c
echo "print each param from \"\$*\""
for var in "$*"
do
    echo "$var"
done

# 循环输出"$@"
# print each param from "$@"
# a
# b
# c
echo "print each param from \"\$@\""
for var in "$@"
do
    echo $var
done

2.3 shift

位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1$2$3丢弃,注意:$0不移动。不带参数的shift命令相当于shift 1
shiftUnix非常有用的命令。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当Shell程序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求Shell在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在$1后为 $2,在$2后面为$3等。在shift命令执行前变量$1的值在shift命令执行后就不可用了。

3. if

3.1 语法

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

3.2 特性选项

选项描述
[ -a FILE ]如果FILE存在,则为真
[ -b FILE ]如果FILE存在且是一个块特殊文件,则为真
[ -c FILE ]如果FILE存在且是一个字特殊文件,则为真
[ -d FILE ]如果FILE存在且是一个目录,则为真
[ -e FILE ]如果FILE存在,则为真
[ -f FILE ]如果FILE存在且是一个普通文件,则为真
[ -g FILE ]如果FILE存在且已经设置了SGID则为真
[ -h FILE ]如果FILE存在且是一个符号连接,则为真
[ -k FILE ]如果FILE存在且已经设置了粘制位,则为真
[ -p FILE ]如果FILE存在且是一个名字管道,则为真
[ -r FILE ]如果FILE存在且可读,则为真
[ -s FILE ]如果FILE存在且大小不为0,则为真
[ -t FD ]如果文件描述符FD打开且指向一个终端,则为真
[ -u FILE ]如果FILE存在且设置了SUID,则为真
[ -w FILE ]如果FILE如果FILE 存在且可写,则为真
[ -x FILE ]如果FILE存在且可执行,则为真
[ -O FILE ]如果FILE存在且属有效用户ID,则为真
[ -G FILE ]如果FILE存在且属有效用户组,则为真
[ -L FILE ]如果FILE存在且是一个符号连接,则为真
[ -S FILE ]如果FILE存在且是一个套接字,则为真
[ FILE1 -nt FILE2 ]如果FILE1比FILE2更近修改, 或者FILE1存在且FILE2不存在,则为真
[ FILE1 -ot FILE2 ]如果FILE1比FILE2旧, 或者FILE2存在且FILE1不存在,则为真
[ FILE1 -ef FILE2 ]如果FILE1和FILE2指向相同的设备和节点号,则为真
[ -o OPTIONNAME ]如果shell选项 OPTIONNAME"开启,则为真
[ -z STRING ]STRING长度为零,则为真
[ -n STRING ] or [ STRING ]STRING长度为非零,则为真

3. 命令

3.1 特殊命令

命令描述
$(cd "$(dirname "$0")"; pwd) 获取命令所在全路径
echo $(cmd) 执行cmd一次命令,得到其标准输出,再将此输出放到原来命令
( ) 执行一串命令,重新开一个shell进程执行该串命令
命令间用;隔开,最后一个命令可以不用分号,括号和符号间需要有空格
{ } 执行一串命令,在当前shell执行该串命令
命令间用;隔开,最后一个命令要用分号,花括号和符号间可以没有空格
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值