shell入门(一)
echo -n 不换行输出
echo -e 处理特殊字符
read -p “please input a number” x 提示输入一个数,并赋值给x
case 用法
case $x in
1) echo 'You select 1'
;;
2) echo 'You select 2'
;;
*) echo 'You do not select a number between 1 to 4'
;;
esac
判断
if [ ans−ge3−aans -le 9 ]
使用函数
#!/bin/sh
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
RES='\E[0m'
function usage(){
echo "USAGE: $0 {1|2|3|4}"
exit 1
}
function menu(){
cat <<END
1.apple
2.pear
3.banana
END
}
function chose(){
read -p "pls input your choice:" fruit
case "$fruit" in
1)
echo -e "${RED_COLOR}apple${RES}"
;;
2)
echo -e "${GREEN_COLOR}pear${RES}"
;;
3)
echo -e "${YELLOW_COLOR}banana${RES}"
;;
*)
usage
esac
}
function main(){
menu
chose
}
main
统计传入的参数个数 脚本名字
$# $0
连接两个字符串
v1="hello"
v2="world"
v3=$v1$v2
计算两个数的和
A=1
B=2
let v3=$A+$B
echo $v3
echo $(($A+$B)) # 方法 2
echo $[$A+$B] # 方法 3
expr $A + $B # 方法 4
echo $A+$B | bc # 方法 5
awk 'BEGIN{print '"$A"'+'"$B"'}' # 方法 6
如何获取某一行(取第五行)
方法一:head -5 test.txt|tail -1
方法二:cat test.txt|sed -n '7p' //-n是指只显示生效的那行
后台运行
nohup command 永久执行,和用户端没有关系,断开ssh连接也不会影响到其执行,该命令执行之后会产生子文件,该子文件位于当前目录,相当于日志文件
command & 后台执行,当用户推出(挂起)的时候,命令行也会跟着退出
比较巧妙的命令是
nohup command & 使命令永久在后台执行
怎么注释语句
注释一行#
注释多行
<<COMMENT
我要注释的内容
COMMENT
'和"以及`(反引号)区别
' 把括起来的部分当做字符串
" 如果字符串里有变量,那么会使用变量的值来代替该变量
` 把括起来的部分当做命令执行
调用另一个脚本
exec ./a.sh //执行之后,该进程剩下的部分不会再执行,而是转至执行a.sh脚本
source ./a.sh //执行完该脚本之后,继续回来继续执行剩下的脚本
fork ./a.sh //直接运行脚本,会以当期那shell为父进程,产生新的进程
使用echo命令获取字符串变量的一部分
echo ${variable:x:y} //取字符串variable中的x到y的位置的字符
根据某个字符提取部分数据
variable="User:123:321:/home/dir/aa"
echo ${variable#*:*:} 或者 echo ${variable##*:}
运行结果
321:/home/dir/aa
如果只需要显示User
echo ${variable%:*:*:*} 或者 echo ${variable%%:*}
xargs的使用 执行下列命令会分行显示 -n1表示每次传一个参数过去,我刚开始的时候用,把参数隔开了,然后就没有分行显示
echo '1 , 2 3 4'|xargs -n1
修改bash的标准分割符为:
IFS=":"
获取变量的长度
${#variable}
打印变量的最后5个字符
echo ${variable: -5} //注意-5前有个空格
${variable:-10} //如果variable未赋值,则输出5,如有赋值,只输出原值
转换为大写
tr '[:lower:]' '[:upper:]'
删除字符串中的所有空格
echo $string|tr -d " "
写出输出数字 0 到 100 中 3 的倍数(0 3 6 9 …)的命令 ?
for i in {0..100..3}; do echo $i; done
[ $a == $b ] 和 [ $a -eq $b ] 有什么区别
[ $a == $b ] - 用于字符串比较
[ $a -eq $b ] - 用于数字比较
如何检查字符串是否以字母 "abc" 开头 ?
[[ $string == abc* ]]
如何列出以 ab 或 xy 开头的用户名 ?
egrep "^ab|^xy" /etc/passwd|cut -d: -f1
$* 和 $@ 有什么区别*
$* - 以一个字符串形式输出所有传递到脚本的参数
$@ - 以 $IFS 为分隔符列出所有传递到脚本中的参数