//reference:http://c.biancheng.net/cpp/view/7011.html
sh、csh、tcsh、ash、bash等
查看当前linux可用shell:
cat /etc/shells
echo $PS1
root@iZx3842s192qknZ:/usr/local# echo $PS1
[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
echo $PS2
#!/bin/bash
echo -e "Hello World ! \n"
e表示对转义字符进行转义
“#”开头的行就是注释
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
url=http://www.cnencmap.com:8081/archives
name='我的博客'
author="promoter"
echo $url
echo $name
echo $author
注意=号两边不能有空格,修改变量重新赋值即可。
{ }帮助解释器识别变量的边界(注意此时必须用双引号,单引号会原样输出单引号中的文本):
echo "I love ${author}"
删除变量,uset(不能删除只读变量):
uset author
readonly修饰只读变量,如果修改将报错(当时不会暂停脚本的继续执行)
readonly author
variable=`command`
variable=$(command)
输出时间:
DATE=`date`
echo "Date is $DATE"
echo '当前pid,$$:' $$
echo '当前脚本文件名,$0:' $0
echo '$n传递参数n:' "first Parameter:$1" "second Parameter:$2"
echo '$*和$@传递所有参数' $* $@
echo '$#传递参数个数:' "parameter count:$#"
echo '$?获取上一个命令的退出状态,0代表成功,1代表失败 ' $?
echo '变量替换:'
echo "var is ${var}"
echo "?message查看错误信息,如果有错,脚本将停止执行"
#echo ${var:?message}
echo ${var:-word}
echo "var is ${var}"
echo ${var:+word1}
echo "var is ${var}"
echo ${var:=word2}
echo "var is ${var}"
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a is equal to b"
fi
if [ $a != $b ]
then
echo "a is not equal to b"
fi
加减乘除,余数,等于不等于:+ - * / % == !=
等于:-eq
不等于:-ne
大于:-gt
大于等于: -ge
小于: -lt
小于等于:-le
! -a -o
长度是否为0: -z
长度是否不为0: -n
字符串是否为空 : $a
读写执行属性:
-r -w -x
文件(目录)是否存在:
-e
文件是否为常规文件:
-f
是否是文件夹
-d
文件大小是否为0:
-s
字符串长度: ${#a}
子字符串: ${a:1:4}
查找字符串:
echo `expr index "$string" is`
数组使用:
array_name=(v0 v1 v2 v3)
array_name=(
v0
v1
v2
v3
)
array_name[0]=v0
array_name[1]=v1
array_name[2]=v2
读取数组某个值: ${array_name[0]} 读取所有值: ${array_name[]} ${array_name[@]} 获取数组元素个数: ${#array_name[]} ${#array_name[@]}
输出会覆盖文件内容 echo "....just a test" > myfile
追加到文件末尾 echo "add a line " >> myfile 计算users文件中的行数: wc -l < users 高级用法。。。。
类似c语言一模一样地用法。 可以用单引号输出: printf '%d %s\n' 1 "ffdfd" 也可以没有引号: printf %s ddf dfd
a=10 b=20 if [ $a == $b ] then echo "$a == $b" elif [ $a -gt $b ] then echo "$a >= $b" elif [ $a -le $b ] then echo "$a < $b" else echo "error" fi
case可以匹配一个值或者一个模式。 echo "please input nomber between 1 to 2:" read aNum case $aNum in 1) echo ”you select 1" ;; 2) echo "you select 2" ;; 3) echo "you select 3" ;; *) echo "input error, please input nomber between 1 to 2." ;; esac
option="${1}"
case ${option} in
-f) file="${2}"
echo "file name is $file"
;;
-d) dir="${2}"
echo "dir name is $dir"
;;
*)
echo "basename ${0}
:usage: [-f file] | [-d directory]"
# basename命令用于:去掉文件名的路径和后缀
exit 1
;;
esac
输出主目录下.base开头的文件: for file in $HOME/.base* do echo $file done
counter=0 while [ $counter -lt 5 ] do counter='expr $counter+1' echo "$counter" done until命令和while循环相反,条件为false时执行循环。 continue跳出当前循环, break跳出循环。
先定义后使用,可以嵌套使用. $n获取参数,但是$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。 fun1(){ echo "first parameter os $1" echo "parameter count $# " echo "parameter all parameter $* " echo "1..." return "2" } #使用 fun1 ret=$? echo "fun1 return $ret"
被包含的脚本不需要执行权限。 1.sh url="www.baidu.com" 2.sh #!/bin/bash . ./1.sh echo $url
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。