CurDate=date +"%Y-%m-%d"
* set pfName=/home/sgs/test.txt
* ${pfName%.*} = /home/sgs/test
* ${pfName##*.} = txt
* ${pfName##*/} = test.txt
* ${pfName%/*} = /home/sgs
* temp=${pfName##*/} ${temp%.*} = test (※不用其他的命令暂时不知道怎么做)
* ${srcPath/dir1/dir2} (将srcPath中第一个dir1替换为dir2,eg: /path1/dir2/dir1/dirc/file.txt, 执行 替换后: /path1/dir2/dir2/dirc/file.txt)
* ${srcPath//dir1/dir2} (将srcPath中全部dir1替换为dir2)
echo "$USER"
cp -R /dir/backup2/ /dir/developer
注意不能为
cp -R /dir/backup2/* /dir/developer/*
* *set -e*:表示一旦脚本中有命令的返回值为非0,则脚本立即退出,后续命令不再执行;
* *set -o pipefail*:表示在管道连接的命令序列中,只要有任何一个命令返回非0值,则整个管道返回非0值,即使最后一个命令返回0.
进入到当前目录 - cd "
dirname “$0”"
获取当前目录 - current_dir=$(pwd)
暂停 - read -p "任意键继续..."
if [ "$(uname)" = "Darwin" ]; then
# it's mac
else
# it's linux
fi
if
if [ -f file ] 如果文件存在
if [ ! -d ... ] 如果目录不存在
if [ -s file ] 如果文件存在且非空
if [ -r file ] 如果文件存在且可读
if [ -w file ] 如果文件存在且可写
if [ -x file ] 如果文件存在且可执行
if [ $integer_var -eq 0] 如果此变量等于0
#eg :
if [ ! -x "$NDK_FILE_ROOT" ];then
# do something
fi
pwd
指当前命令行的路径,比如marsdeMacBook-Pro:marstau.github.io mars$,则`pwd`输出路径为/Users/mars/projects/marstau.github.io
sh script.sh
str="abc"
calc_len=${#str} #### $*,$@[More](http://hi.baidu.com/chorchee/item/19b8c44470e7a42311ee1e30)
$\*所有的位置参数,被作为一个单词. 注意:"$\*"必须被""引用.
$@与$\*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递,并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的单词.
注意:"$@"必须被引用. $@ $\* 只在被双引号包起来的时候才会有差异
双引号括起来的情况:
$\*将所有的参数认为是一个字段
$@以IFS(默认为空格)来划分字段,如果空格在“”里面,不划分。
没有括起来的情况是$@和$*一样的,见到IFS就划分字段。 #### export[More](http://www.cnblogs.com/zhangze/articles/1832542.html)
export 功能说明:设置或显示环境变量。
*语 法*:export [-fnp][变量名称]=[变量设置值]
补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅限于该次登陆操作。
*参 数*:
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
eg:
# !/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2"
}
# Invoke your function
Hello Zara Ali
$./test.sh
Hello World Zara Ali
$
declare -a arr
# 或者
declare -a arr[subscript]
# shell解释时会忽略subscript
arr[subscript]=value
若下标为@或*,则作为通配符解释,代指所有的数组元素,但不可对这个两个作为下标赋值。
$ echo ${name[@]}
1 34 45
$ echo ${name[*]}
1 34 45
$ echo ${name[1]}
34
$ echo ${#name[@]}
4
$ echo ${#name[*]}
4
dir=$(ls -l $1 |awk '/^d/ {print $NF}')
for i in $dir
do
echo $i
done