linux 5

21 AUG

13.3.3 shell script 的默认变量($0, $1)

/path/to/scriptname opt1 opt2 opt3 执行脚本的路径和文件名是$0变量,opt1~opt3是$1-$3变量。

符号意义
$0被执行的文件名
$#文件名后接的参数“个数”
$@代表”$1”,”$2”,”$3”,”$4”等变量的具体内容
shfit:造成参数变量号码偏移

这里写图片描述

shift会移动变量,而且shift后面可以接数字,代表拿掉最前面的n个参数的意思。

条件判断式

if [条件判断式] ; then 
    当成立时执行
fi
if [条件判断式1] ; then
    当成立时执行
elif [条件判断式2] ; then
    当成立时执行
else
    当判断式12都不成立时可以进行
fi

13.4.2 利用case…esac判断

case $变量名称 in
    "one")
    echo "Your choice is ONE"
    ;;
    "two")
    echo "Your choice is TWO"
    ;;
    "three")
    echo "Your choice is THREE"
    ;;
    *)
    echo "Cannot get your choice."
    ;;
esac

13.4.3 利用function功能

function fname(){

}

echo -n "Your choice is ..." #加上-n可以不断行,继续在同一行显示

function的参数:

function printit(){
    echo "Your choice is $1"  #这里的$1与主函数的$1不同。
}

case $1 in
    "one")
        printit 1
        ;;
    "two")
        printit 2
        ;;
    "three")
        printit 3
        ;;
    *)
        echo "Usage $0 {one|two|three}"
        ;;
esac

13.5 循环loop

13.5.1 while do done, until do done 不定循环

  • 当condition条件成立时,就进行循环,到condition的条件不成立才停止。
while [ condition ]    #中括号内的状态是判断式
do
    程序段落
done
  • 当condition条件成立时,就终止循环,否则就持续进行循环程序段。
until [ condition ]
do
    程序段落
done

13.5.2 for…do…done 固定循环

for var in con1 con2 con3 ...
do
    程序段
done
#第一次循环时,$var的内容为con1;
#第二次循环时,$var的内容为con2;
#第三次循环时,$var的内容为con3;
#...

finger 命令: reference

  • 用来显示用户的相关信息,包括用户名、用户全名、终端设备和登陆时间等信息
  • finger [options] [user-list]

    参数


不带任何参数时,finger将提供关于登录本地系统的用户的短报告(-s)。当指定参数user-list时,finger将提供user-list中关于每个用户的长报告(-l)。user-list中的名字不区分大小写。
如果用户名包含符号@,则finger将符号@后面的文件名解释为远程主机名,通过网络连接到该主机。如果在符号@前面存在一个用户名,那么finger将提供远程系统上的用户的相关信息

选项
-l 当指定user-list时,默认显示用户的详细信息
-s 当不指定user-list时,默认给出关于每个用户的短报告

`id username` 查看用户名的uid。 从1到100的序列: `for sitenv in $(seq 1 100)`

13.5.3 for…do…done的数值处理

for ((初始值,限制值,执行步长))
do
    程序段
done
eg.
read -p nu
s=0
for ((i=i;i<=$nu;i=i+1))
do
    s=$(($s+$i))
done
echo "The sum is $s."

13.6 shell script的追踪与调试

`sh -[nvx] script.sh` 参数: -n : 不要执行script, 仅查询语法的问题 -v : 在执行script之前,现将script的内容输出到屏幕上 -x : 将使用到的script内容显示在屏幕上(就是去掉注释)–对debug很有用

14.1.1 用户标识符:UID与GID

用户的ID与账号存在`/etc/passwd`中。在显示文件属性的时候,系统会根据`/etc/passwd`与`/etc/group`的内容,找到UID/GID对应的账号与组名再显示出来。 如果UID/GID的号码被修改了,文件属性所有者会变成数字。
  • 查找系统里面有没某用户
    grep "username" /etc/passwd

14.1.2 用户账号

用户输入账号登陆系统之前,系统进行了哪些操作呢?

  • /etc/passwd里面有没有输入的账号,没有则跳出;有则将该账号的UID和GID(在/etc/group)读出来。另外,该账号的主文件夹和shell设置也一同读出。
  • 核对密码表。查找/etc/shadow对应的账号与UID,然后核对密码是否相符
  • 如果一切顺利,就能登陆成功,进入shell控管的阶段了。
    所以,每次登陆linux时需要访问到/etc/passwd/etc/shadow文件。

解析/etc/passwd文件

位置序号名称含义
1账号名称就是账号名,用来对应UID
2密码早期的密码放在这里…现在看到的是“x”
3UID用户标识符,0:系统管理员root,1~499:系统账号,500~65535:可登陆账号
4GID/etc/group有关
5User Info解释账号的意义
6主文件夹对应用户的主文件夹,eg /root,/liangst。如果想把该用户的主文件夹定义成别的文件夹,在这里改就可以了。
7Shell用户登陆之后能取得一个shell来与系统的内核通信。

14.1.3 有效与初始用户组

/etc/group文件结构
1. 用户组名称
2. 用户组密码。给用户组管理员用的,现在通常都是x了。
3. GID。用户组的ID。与/etc/passwd的第四个字段GID对应的。
4. 此用户组支持的账号名称。用“,”分隔,eg root:x:0:root,dmtsai

有效用户组(effective group)与初始用户组(initial group):

  • 初始用户组:用户一登陆会自动取得的用户组,这组不需要在/etc/group的第四字段记录该账号。
  • 非初始用户组:要在/etc/group上加上该账号
  • 某个用户账号可以同时支持两个或以上用户组。因此所在用户组拥有的功能,这个用户都会拥有。

假如该用户现在要创建一个文件夹或者文件,新文件(夹)的组是属于哪个呢?这要检查当时的有效用户组:

  • 可以用groups指令查看该用户所有支持的用户组。而且第一个输出的用户组就是有效用户组。

有效用户组的切换:

  • 可以用newgrp groupname指令切换有效用户组。前提是该用户本身有该用户组的支持。
  • 这个newgrp命令的原理:它是用一个另外的shell来提供这个功能的。就好像用户切换su - root那样,所以如果想退回去原来的组可以用exit。

/etc/gshadow文件:

  • 结构与/etc/group一样的。
  • 第二字段密码列,如果开头为“!”表示没有合法密码,所以没有用户组管理员
  • 第三字段:用户组管理员的账号
  • 第四字段:该用户组的所属账号(与/etc/group相同)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值