本文主要是介绍在Sony的shell 学习(2010/07开始),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 关于循环查找文件,不能用exit 1,否则跳出循环了:
FileList=" a.txt b.txt c.txt "
for file in $FileList
do
if [ ! -f $file ]
then
echo The file is not exit
exit 1 // this line should be deleted, otherwise, the second file will not be checked
else
echo File is found ,please go next step.
fi
done
2关于对文件内容的过滤,条件叠加的话,应把文件放在第一个就可以避免覆盖:
cat File | grep -v '^#' | grep -v '^$' //功能是去掉以#开头的注释行和空行
注意不能写成:grep -v '^#' file| grep -v '^$' file // This line is wrong
3:关于单引号和双引号的区别:
一般区别不大,就是" " 在有$ / 等特殊字符时会有不同。
4:关于文件后加时间戳:
Datestr=`date '+%Y%m%d-%H%M%S' ` // 注意单引号,反引号都用到了,还有%后的大小写
cp $1 ./backup/$1$Datestr
5:关于增加用户和组:
功能说明:建立用户帐号。
语 法:useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号] 或 useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>]
补充说明:useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。
参 数:
-c<备注> 加上备注文字。备注文字会保存在passwd的备注栏位中。
-d<登入目录> 指定用户登入时的启始目录。
-D 变更预设值.
-e<有效期限> 指定帐号的有效期限。
-f<缓冲天数> 指定在密码过期后多少天即关闭该帐号。
-g<群组> 指定用户所属的群组。
-G<群组> 指定用户所属的附加群组。
-m 自动建立用户的登入目录。
-M 不要自动建立用户的登入目录。
-n 取消建立以用户名称为名的群组.
-r 建立系统帐号。
-s<shell> 指定用户登入后所使用的shell。
-u<uid> 指定用户ID。
还是看我写的一个case:
要求:添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。
groupadd sony
for i in `seq 1 30`
do
if [ $i -lt 10 ];then
num="0$i"
else
num=$i
fi
useradd -g sony -d /home/std${num} std${num}
chmod 754 /home/std${num}
done
注意:我试了一下,okay, 确实在/etc/passwd 下已经建立了30个用户,就是权限要设置一下,我会马上一下密码。
查看其中一个用户的组的情况:groups stu01
补充一下:看文件夹权限:ls -ald stu01
6:关于密码的增加和修改:
超级用户root,下passwd stu01 ,输入两次密码就可以了完成设置 ,其他普通用户stu01 ,要是想切换到stu02, 用su stu02, 还非得要有密码。批量生成密码不成问题。
当然密码如果太复杂,也可以删除掉:在root用户下:passwd -d stu01 就可以啦,当然普通用户不能
7:2010/07/07学习:
关于批量生成不同日期的空文件
read -p "Please input the file name :" filename
date1=$(date --date='2 days ago' +%Y%m%d) // 前两天的日期
date2=$(date --date='1 days ago' +%Y%m%d)
date3=$(date +%Y%m%d)
file1=${filename}${date1}
file2=${filename}${date2}
file3=${filename}${date3}
touch $file1
touch $file2
touch $file3
---------------------------------------------------------------------
8: 关于显示文件的全部时间:ls --full-time //可以用于截取不同的年份
9:今天又联系了一下cut ,用到它的几个参数: -b -c -f -d
先看源文件:
stu01:X:529:503::/home/stu01:/bin/bash
stu02:X:530:504::/home/stu02:/bin/bash
stu03:X:531:505::/home/stu03:/bin/bash
......
像截取有冒号的文件,可以指定域截取:
cut -f1 -d ':' /etc/passwd | head -10 //-f1 是指定第一个域,-d ':' 以冒号为临界点
看一下执行结果:
stu01
stu02
stu03
......
stu10
在看一下:cut -f3 -d ':' /etc/passwd | tail -10
结果:
529
530
531
......
538
留下一个问题,如果分割符是TAB,那怎么办?可以试试:cut -f1- -s --output-delimiter='/' a.txt
TAB被换成/
10 关于文件内容的替换,tr 的作用就大了:
将文本文件从小写转换为大写并将结果存入一个新文件,格式为:
cat file-to-translate | tr "[a-z]" "[A-Z]" > new-file-name
命令tr -cs "[a-z][A-Z]" "[/012*]"将文件每行所有不包含在[a-z]或[A-Z](所有希腊字母)的字符串放在字符串1中并转换为一新行。-s选项表明压缩所有新行, -c表明保留所有字母不动。
tr的第一个功能就是转换控制字符,特别是从dos向UNIX下载文件时,忘记设置ftp关于回车换行转换的选项时更是如此。
如果需要删除文件中^M,并代之以换行。使用命令:
tr -s "[/015]" "/n" < input-file
或者用下述命令得同样结果:
tr -s "[/r]" "[/n]" < input-file
也可以用下述命令:
tr -s "/r" "/n" < input-file
另一个一般的Dos到UNIX转换是命令:
tr -s "[/015/032]" "[/012*]" < input-file
将删除所有^ M和^ Z,代之以换行。
要删除所有的tab键,代之以空格,使用命令:
tr -s "[/011]" "[/040*]" < input-file
替换passwd文件中所有冒号,代之以tab键,可以增加可读性:
tr -s "[:]" "[/011]" < /etc/passwd
或者用下述命令得同样结果。这里使用tab键的速记符:
tr -s "[:]" "[/t]" < /etc/passwd
11:2010/07/08 学习
root用户给stu01增加一个附属组:usermod -G test stu01 //修改用户的附属组为test
参考usermod 的其他用法:
linux usermod 命令详解
功能说明:修改用户帐号。
语 法:usermod [-LU][-c ][-d ][-e ][-f ][-g ][-G ][-l ][-s ][-u ][用户帐号]
补充说明:usermod可用来修改用户帐号的各项设定。
参 数:
-c 修改用户帐号的备注文字。
-d登入目录> 修改用户登入时的目录。
-e 修改帐号的有效期限。
-f 修改在密码过期后多少天即关闭该帐号。
-g 修改用户所属的群组。
-G 修改用户所属的附加群组。
-l 修改用户帐号名称。
-L 锁定用户密码,使密码无效。
-s 修改用户登入后所使用的shell。
-u 修改用户ID。
-U 解除密码锁定。
今天也学习了:chmod :练习了:chmod u+r file(or folder) , chmod u+w file(or folder) chmod u+x file(or folder)
还有g+r g+w g+x, o+r o+w o+x
有些文件没有权限操作,是因为文件夹的权限不够。
还有改变file 的用户和组:
chown test1:test2 data //data 的用户变为:test1 ,所属的组变为:test2, 我在root 用户可以执行的,其他用户要试试
12:删除用户:
userdel -r stu01 // 具体的log 在/var/log/secure 上可以看的到
这篇关于在Sony的shell 学习(2010/07开始)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!