. ./foo.sh 在当前bash下执行, 同source ./foo.sh。
foo.sh中环境变量设置,会对当前Shell起作用。
./foo.sh启动一个子shell执行。
foo.sh中环境变量设置,只会影响子shell,无法改变当前BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。
'string' 单引号 引号内容视为单一字串。引号内$没有作用,视为一般符号处理,防止任何变量替换。
# var=home
# echo '$var'
# $var
\' 单引号转义符 命令行中,单引号内不能出现单引号,要在单引号外,用单引号转义符。
# echo 'matlab -nodisplay -r "matchup('\'"$mat_feat_new"\',\'"$mat_feat_old"\',\'"$asin_new"\',\'"$asin_old"\',"$topi",\'"$matchup_csv"\''); exit;"'
# matlab -nodisplay -r "matchup('','','','',,''); exit;"
"string" 引号内容视为单一字串。防止通配符扩展,但允许变量扩展。
# var=home
# echo "$var"
# home
`command` 倒引号 引号括住命令
# foo=`date +%F`
# echo "Today $foo"
# Today 2017-07-16
$0, $1, $2, ....., ${10}, ${11} ./foo.sh var1 var2 引用参数
指令本身为0,其后为1,然后依此类推。个位数直接用数字,两位数以上用 {}括住。
$* 代表所有参数列表
使用时,视情况加上双引号。echo "$*",以"$1 $2 … $n"的形式输出所有参数。
$@所有参数列表
echo "$@",以"$1" "$2" … "$n" 的形式输出所有参数。
var=${@:2:10}
第2个参数,共10个参数
shell脚本变量参数+远程postgreSQL库+sql变量参数
例子:运行本地脚本,删除server上的postgreSQL库中,table1中brand是nike的记录
./deletesth.sh nike
其中:
deletesth.sh 如下
ssh user@192.168.0.16 "cd workdir/; ./delete_data.sh '$1';"
此处,双引号是ssh命令要求,可以执行多句命令。单引号防止变量替换
192.168.0.16上,workdir目录下的delete_data.sh 如下
psql -d exampledb -h localhost -U dbuser -v var1="'"$1"'" -f delete_data.sql
此处,引号保证变量 :var1 最后结果是'nike'(变量的值是条件查询中的字符串)
192.168.0.16上,workdir目录下的delete_data.sql 如下
delete from table1 where brand = :var1;