首页  

Linux Shell总结     所属分类 shell 浏览量 126
变量

字母数字下划线,不能以数字开头
不能使用bash关键字
变量赋值=号两边不能有空格 
变量使用引用
age=18
echo ${age}

name='dyyx'
echo "hello,${name}"


readonly 只读变量名  
age=7
readonly age
age=8
报错
-bash: age: readonly variable

unset 删除变量,删除后不可用,不可删除只读变量
error='xxx'
unset error

LOGLEVEL=debug  和 export LOGLEVEL=debug 区别
前者只对当前进程有效,后者(环境变量)对子进程也有效




字符串
name="dyyx"
获取字符串长度 echo ${#name}
截取字符串  echo ${name:1:2}
yy

# 单引号原样输出
echo 'hello,${name}'
hello,${name}
echo "hello,${name}"
hello,dyyx


数组
只有一维数组,下标从0开始
arr=(v1 v2 v3 v4)
arr=('1' '2' '3')
arr[0]=3

获取数组元素 ${arr[n]},或取所有元素 ${arr[@]}

或取数组长度 ${#arr[*]} 或者 ${#arr[@]}

参数
sh xxx.sh  
$0表示文件名
$1是第一个参数


$#	 参数个数
$*	 所有参数
$@	 所有参数

$?	上个命令或函数的返回值  , 一般成功返回0
$$	当前Shell进程ID

$* 和 $@  所有参数 
被双引号包含时,"$*" 会将所有的参数作为一个整体


f=$0
echo $f
wd=`dirname $f`
echo $wd
wd=$(dirname $0)
echo $wd
cd `dirname $0`
echo `pwd`

获取脚本文件全路径和目录

fullpath=$(readlink -f $0)
echo "fullpath $fullpath "
workdir=$(dirname $(readlink -f $0))
echo "workdir:$workdir"





if [1==1];then   
    ehco 'true'   
fi
a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "xxx"
fi




for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done


for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done


while condition
do
    command
done


#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done



条件测试 文件测试 逻辑测试 整数值比较 字符串比较 文件测试 -d 文件是否为目录类型 -e 文件是否存在 -f 是否为一般文件 -r 是否有权限读取 -w 是否有权限写入 -x 是否有权限执行 [ -d test.txt ] [ -e test.txt ] echo $? 存在返回0 echo $USER [ $USER = admin ] 整数值比较 -eq 等于 -ne 不等于 -gt 大于 -lt 小于 -le 等于或小于 -ge 等于或大于 [ 10 -eq 10 ] 字符串比较 = 是否相同 != 是否不同 -z 是否为空 [ $LANG != "en.US" ] && echo "Not en.US" [ $LANG = "zh_CN.UTF-8" ] && echo "zh_CN.UTF-8" 流程控制语句 if for while case DIR="/tmp/hello" if [ ! -e $DIR ] then mkdir -p $DIR fi DIR="/tmp/hello2" if [ -e $DIR ] then echo "exist" else echo "not exist" fi inputcheck.sh read -p "请输入一个字符" ch case "$ch" in [a-z] | [A-Z]) echo "输入的是 字母" ;; [0-9]) echo "输入的是 数字" ;; *) echo "输入的是其他字符" esac for((i=1; i<=5; i++)) do echo $i done for line in `cat hello.txt` do echo $line done score.sh score=$1 if [ ${score} -lt 50 ]; then echo "小于50" elif [ ${score} -gt 50 ]; then echo "大于50" else echo "等于50" fi
echo "hello world"|cut -d " " -f 2 -d 指定分隔符 -f 返回字段下标 从1开始
function sayhello(){ echo "hello,$1" } sayhello "dyyx" function showparam(){ num=$# echo "paramnum=$num" echo $* #for((i=0;i<=$num;i++)) #do # echo "param[$i]=$i" #done } # paramnum=1 # "$*" 把参数作为一个整体 只有一个参数 showparam "$*" # paramnum=3 showparam "$@" # paramnum=3 showparam $* # paramnum=3 showparam $@ echo `expr 2 + 3 ` # 乘号前加 \ echo `expr 2 \* 3 ` echo $[2+3] echo $[2*3] echo $((2+3)) echo $((2*3)) a=2 b=3 echo $[a+b] echo $[a*b] echo vs printf echo 自动添加换行符 printf format-string [arguments...] %s %c %d %f d Decimal 十进制整数 s String 字符串 c Char 字符 f Float 数字型 printf "%-10s %-8s %-6d %-4.2f\n" tiger 男 9 66.1234 %-10s 宽度为10的字符串( - 左对齐,默认右对齐) %-8.2f 宽度为8的字符串 .2指保留2位小数 printf "%10s %8s %6d %8.2f\n" tiger 男 9 66.1234 使用[[ … ]]条件判断结构,而不是[ … ] 比如 &&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。 可以直接使用if [[ $a != 1 && $a != 2 ]] 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ] 或者 if [ $a -ne 1 -a $a != 2 ]

上一篇     下一篇
spring-session-jdbc使用数据库存储共享session

shell里的浮点数运算

linux shell 获取进程相关信息

社会潜规则21条

增量方差java实现

智能手环原理