bash #进入子shell
exit #退出子shell
变量
- 变量的赋值符号两边不能有空格,当变量的值引用另一个变量时,用 “ ” 将变量的值括起来。
- " " 可以解析变量的值;' ' 不能解析变量的值,会当做字符串处理。
- 设为环境变量可以在子程序(bash开启的子shell)中使用。
Var_name=value #定义变量
echo $Var_name #查看变量名
Var_name2="$Var_name"test #变量值引用变量,valuetsst
read -p "提示语" -t wait_time var_name #用键盘输入变量
read var_name #用键盘输入变量,后面可以连续跟多个变量(中间用空格)
unset Var_name #清除变量值
export Var_name #定义环境变量,非环境变量无法在bash开启的子程序中使用。
export PATH=$PATH:/add_path_needed #环境变量PATH中追加路径
env #查看环境变量
脚本标量
· · #反引号中的内容为系统命令,会执行其中的内容。
‘ ’ #包含的变量当做字符串解释。
" " #变量解释为对应的变量值。
( ) #由子shell完成
{ } #由当前shell执行
转义字符:与C语言的转义字符一样,但是 echo 命令中需要增加 -e 方可执行转义。
文件操作
-e |
是否存在 | -r |
可读 |
-d |
是否目录 | -w | 可写 |
-f | 是否文件 | -x | 可执行 |
数值测试
test var1 -eq var2
[ var1 -eq var2 ]
shell 比较符号 | 英文单词 | |
相等 |
-eq | equal |
不相等 | -ne | not equal |
大于 | -gt | greater than |
大于等于 | -ge | greater equal |
小于等于 | -le | less equal |
小于 | -lt | less than |
if 条件语句
if [ condition1 ]; then
running_coding
elif [ condition2 ]; then
running_coding
else
running_coding
fi
# 如果文件夹存在则进入文件夹新建文件
# 如果文件夹不存在则建立文件夹在创建新文件
read -p "Input file name: " filename
if [ -e $filename ]; then
echo "$filename is exit."
cd $filename
echo "Building file"
touch all.c
else
echo "$filename is not here"
mkdir $filename
cd $filename
echo "In file and building file"
touch all.c
fi
for 循环语句
# 形式一
for (( 初始值; 限制值; 步长))
do
程序段
done
# 形式二
for var in con1 con2 ...
do
程序段
done
# 判断filename中的子项是文件还是目录
for filename in `ls`
do
if [ -d $filename ]; then
echo "$filename is directory."
elif [ -f $fileneme ]; then
echo "$filename is a file."
fi
done
# 计算1~100的和
declare -i i=0
# declare是bash的内建命令,用于声明shell变量、设置属性。
declare -i sum=0 # 强制把sum变量当做int型参数计算。
for (( i=0; i<=100; i++))
do
sum=$sum+$i;
done
echo "sum is: $sum"
特殊变量
匹配文件名并修改
# Find file through filename and rename
declare -i i=0
for (( i=0; i<=10; i++ ))
do
touch in_${i}_in_data.bin
done
echo "=== building file is OK!"
ls -l
echo "=== rename file is begining"
declare -i fi=0
for (( fi=0; fi<=10; fi++ ))
do
name=$(ls in_${fi}_in*)
#name=$(ls `in_${fi}_in*`)
echo "-- old file name: $name"
newname=out_${fi}.bin
echo "-- new file name: $newname"
mv $name $newname
echo "-- rename is OK -- ${fi}"
done
bash 的各种括号
- ( ) 将多个命令组合在一起执行,相当于一个命令组。
- { } 和 ( ) 类似,也是将多个命令组合在一起。它们之间的区别是,( ) 是在产生的子shell下执行,而 { } 是在当前的shell下执行。
- [ ] 与test命令一样,用于比较值以及检查文件类型
- [[ ]] 是[]的“增强版”,它能够将多个test命令支持的测试组合起来
- (( )) 做数值运算,如果表达式求值为 0,则设置退出状态为 1;如果求值为非 0 值,则设置为 0。