$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1 ..9
$* 这个程式的所有参数,此选项参数可超过9 个。
$# 这个程式的参数个数
$$ 这个程式的PID (脚本运行的当前进程ID 号)
$! 执行上一个背景指令的PID (后台运行的最后一个进程的进程ID 号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0 表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同
$@ 跟$* 类似,但是可以当作数组用
if:
if ()
then
...
else
...
fi
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-f 当file存在并且是正规文件时返回真
-g 当由pathname指定的文件或目录存在并且设置了SGID 位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 当file存在文件大小大于0 时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID 位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID 所指定的用户拥有时返回真。
打开/home/folder/01 .sh
编辑:
#!/bin/bash
bashDir=$(cd "$(dirname "$0") ; pwd)
echo $baseDir
执行01.sh
打印:/home/folder
pushd 和 popd
将目录看作堆栈来用
字符串替换:
#echo qwert > /home/folder/01.sh
#vi /home/folder/02.sh
sed -i "s/qwe/123/" /home/folder/01. sh > /home/folder/02. sh
#chmod +x /home/folder/02.sh
#sh /home/folder/02.sh
#cat /home/folder/01.sh
打印:123 rt
-i表示将操作的结果直接写入文件中
s是替换,/在这里是s替换的格式 一般的情况下格式是这样的 s/字符串1 /字符串2 /
表示将字符串1 替换为字符串2
\" 表示 "
整个一句表示在01. sh中将qwe替换成123
for :
for i in "$@"
do
...
done;
遍历并操作每一个命令行选项
case :
case "$i " in
"$condition1 " )
command...
;;
"$condition2 " )
command...
;;
esac
DIRNAME ="${i#*=}"
表示: 删除(
files=`find -name *.conifg`
for i in $files
do
name=${ i
dir=${ name%/*}
done
name和dir都代表什么呢?
假如
i=this/ is/a/path.config
那么
name=is/a/path.config
dir=this/is/a
也就是说%/*代表取从头到最后一个slash之前的所有内容
#*/ 代表去取从第一个slash之后的所有内容
也就是说
%代表删除从后往前最小匹配的内容
shift:
cat shift.sh
#!/bin/bash
until [ -z "$1 " ]
do
echo "$@ "
shift
done
sh shift.sh 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9
4 5 6 7 8 9
5 6 7 8 9
6 7 8 9
7 8 9
8 9
9
标准输出定向:
> /dev/ null 表示把标准输出重定向到/dev/null ,也就是不在屏幕上输出标准输出
>& /dev/ null 表示把标准输出和错误输出重定向到/dev/null ,程序不在屏幕上输出
egrep:
egrep "123" /home/folder /01. sh
在01. sh中查找含有123 内容在第几行
useradd:
useradd –d /usr/sam -m sam
创建了一个用户sam
主要参数
-c:加上备注文字,备注文字保存在passwd的备注栏中。
-d:指定用户登入时的启始目录。
-D :变更预设值。
-e:指定账号的有效期限,缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。
-g:指定用户所属的起始群组。
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。
-u:指定用户ID号。
sudo / sudoers :
sudo 是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。
sudo 的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411
chown -R
使用参数 -R ,改变目录及其文件用户和群组
xargs:
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。
find -type f -name "*.sh" | xargs sudo chmod +x
找到所有*.sh ,并给它们加执行权限
# find /etc -name "*.conf" | xargs ls –l
获得/etc/ 下所有*.conf 结尾的文件列表,有几种不同的方法能得到相同的结果,下面的例子仅仅是示范怎么实用xargs ,在这个例子中实用 xargs将find 命令的输出传递给ls -l
# ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory
拷贝所有的图片文件到一个外部的硬盘驱动
find:
find /home/folder -name "*. sh" -exec chmod +x {} \;
找到folder中所有的sh文件,并赋予执行权限