linux 5

来源:互联网 发布:外商投资网络支付机构 编辑:程序博客网 时间:2024/04/26 14:27

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 nus=0for ((i=i;i<=$nu;i=i+1))do    s=$(($s+$i))doneecho "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” 3 UID 用户标识符,0:系统管理员root,1~499:系统账号,500~65535:可登陆账号 4 GID 与/etc/group有关 5 User Info 解释账号的意义 6 主文件夹 对应用户的主文件夹,eg /root,/liangst。如果想把该用户的主文件夹定义成别的文件夹,在这里改就可以了。 7 Shell 用户登陆之后能取得一个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相同)
原创粉丝点击